2016-09-30 5 views
4

나는 C++에서 std::variant 유형이 있음을 알게되었습니다. 17. 변형 컨테이너에서 지원하는 사전 정의 된 데이터 유형이없는 것처럼 보이지만 각 변형 유형에 대해 사용자는 자신의 데이터 유형 세트를 정의 할 수 있습니다.std :: variant는 몇 가지 유형을 정의 할 수 있습니까?

std::variant<int, float> v; 

유형 목록은 얼마나 될까요? 라이브러리에는 Aleksandrescu 방식의 최대 개수의 매개 변수에 대한 사전 정의 된 템플릿이 있거나 컴파일러에서 지원되는 변형이며 유형의 수는 제한되지 않습니까?

답변

5

최대 템플릿 매개 변수 수는 컴파일러 구현에 따라 제한됩니다.

The C++ standard says

는 : 컴퓨터가 유한하기 때문에

, C++ 구현은 필연적으로 그들이 수 성공적으로 처리 프로그램의 크기가 제한됩니다. 모든 구현은 알려진 곳에서 이러한 한계를 문서화해야한다. 이 문서의 은 언급 된 고정 된 제한을 인용하거나, 사용 가능한 리소스의 함수로 변수 한도를 계산하는 방법을 말하거나, 고정 된 제한이 없거나 알 수 없다고 말할 수 있습니다.

제한 사항은 아래 또는 다른 설명 된 양을 제한 할 수 있습니다. 각 수량 다음에 괄호로 묶은 숫자 이 해당 수량의 최소값으로 권장됩니다. 그러나이 수량은 이며 지침을 준수하는지 여부는 결정하지 않습니다. 그게 사실이지만 성병에 적용 않습니다 -

... 템플릿 선언에

템플릿 인수는 [1024]

+0

"템플릿 매개 변수의 최대 수는 컴파일러 구현에 의해 제한된다" ::다른? std :: variant에는 구현에 따른 자체 제한이 있습니까? –

+0

@ValentinHeinitz 귀하의 두 가지 질문에 대한 답입니다. AFAIK 아닙니다. –

+0

ОК, 멋지다! 그래서 이것은 정말로 새로운 C++ 11 컴파일러 기능입니다. 부가 기능과 같이 라이브러리에 추가 기능이 없습니다. –

관련 문제