이 질문은 이전 글 : Why shouldn't C++ operator new/delete/variants be in header files?에서 따 왔습니다. 신속하게 요약하기 위해 나는 전역 연산자 new
, delete
등을 오버라이드하는 것에 대해 배우고 있습니다. 이제는 사용자 정의 할당 자 클래스 (내 오버로드 된 연산자 new std::set::insert(...)
, 즉 new
, 따라서 무한 재귀 호출)가 필요합니다. 내가 내 std::set
에 (예를 들어, new
대신에 malloc
를 사용하는) 사용자 지정 할당기를 제공한다고 생각하면 무한 재귀를 무시할 수 있습니다.struct rebind :: other는 무엇을 의미합니까?
커스텀 할당자를 구현하는 방법에 대해 약간의 글을 읽었으며, 의미가 struct rebind
인 것으로 약간 혼란 스럽습니다.
여기에 좋은 Q & A가 있습니다 : Parsing allocator::rebind calls하지만 여전히 특정 항목 하나가 혼란 스럽습니다. cplusplus.com는 struct rebind
에 대해 말한다 :
멤버 유형 다른 내가
other
이struct rebind
의 구성원 인 방법을 이해하지 않는 유형 유형
의 요소를 할당 할 해당 할당 유형입니다. 내가 other
이 struct rebind
의 멤버 변수가 얼마나
template <class Type> struct rebind {
typedef allocator<Type> other;
};
볼 수 없습니다 : 정의는 struct rebind
을 위해 내가 좋아하는 모습을 발견했습니다. 단지 typedef
에드입니다. 전역 네임 스페이스에서 typedef int foo;
을 수행했다면 글로벌 네임 스페이스에 선언 된 int
유형의 전역 변수가 있다는 의미가 아니므로 other
은 struct rebind
의 멤버가됩니까?
덧붙여서, 나는 이것이 적어도 C++ 11 이후의 모든 단순화 된 것을 알고있다. (적어도 나는 이것을 읽었다.) 그러나 나는이 기본적인 것을 이해하기 위해 이것을 먼저 이해하고 싶다. 어떤 도움을 주셔서 감사합니다.
이 항목에서 구조체 내에서 typedef
처리 문제를 설명 할 수 있습니까? 나는 응답자 요하네스 샤 우브 (Johannes Schaub)의이 amazing example에 한번 전에 그것을 보았습니다. 그러나 나는 아직 완전히 그것을 알아 채지 못했습니다. 내게는 typedef의 범위를 포함하는 struct의 인스턴스 내로 제한하는 것처럼 보입니다.
UPDATE : 내 질문에이를 추가 할
. cppreference.com에서이 축소 된 예를 사용 :
#include <memory>
#include <iostream>
#include <string>
int main()
{
std::allocator<int> a1; // default allocator for ints
decltype(a1)::rebind<std::string>::other a2_1;
}
라인 decltype(a1)::rebind<std::string>::other a2_1;
는 std::allocator<std::string> a2_1;
말의 긴 방법이 아니다?
'struct '내에'typedef'를 쓰면 주어진 템플릿을 기반으로 타입을 선택할 수 있습니다. 그게 다야. 특별한 일을하기 위해 전문화되어있을 수도 있지만 그게 전부입니다. 그러나, make_integer_sequence에 대한 구현은 여러분에게 필요한 것을 제공하기 위해 멋진 재귀를 사용합니다. – AndyG