2016-08-04 2 views
1

에서 열거 형을 가져 오기? 나는. 열거 형 "Foo"를 열거 형 "Foo_A"등에서 추론 할 수 없으며 위의 템플릿 코드에서이를 사용합니다. enum 클래스가 여기에서 도움이 될까요?나는이 같은 코드를 가정 열거

+2

이 코드는 몇 가지 문제에 대한 해결책처럼 보입니다. 문제가 무엇입니까? –

답변

2

질문에 대한 답변은 아니요입니다. 현재이 방법이 없습니다. 당신이 직면 한 것은 template <typename T, T t> 관용구라고합니다. 사실 Google을 사용하면 거의 75,000 건의 조회가 발생하며 해결 방법은 없습니다. 당신은 당신이 가진 것처럼 전문화해야합니다.


그러나 수평선에 좋은 소식이 있습니다. 이는 지난 10 년 동안 표준위원회에 여러 번 제안되었다 :

  • N3405T의 유형 및 t은 값이 템플릿 인수로 전달되는 값입니다 template <typename T t>의 수당을 제안
  • N3601template <typename T, T t> 컴파일러가 템플릿 인수로 단일 값을 받아 들일 그에서 Tt
  • N4469 키워드 auto가 될 것을 제안 추론 할 특별한 경우가 될 것을 제안 template <auto t> 값이 템플릿 인수 t로 전달 될 수 있으며 월 4 일 레 넥사에서`15 회의

을 추론 유형 것 같은 것을, N4469 마침내 얻은 견인 격려를 적립하여과에 대한 요청 : 메타 매개 변수를 지정 llowed 표준위원회 회의 개정 : http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4539.html#9

최초 개정판 P0127R0이 1515 년 9 월 25 일에 제출되었습니다.

3 월 4 일 16시 : P0127R1에 작업 개정 초안을 제안하는 후속 개정이 제출되었습니다.

P0127R2은 개념이 C++에 포함되는지 여부가 명확하지 않기 때문에 작업 초안의 개념이 아닌 섹션에서 관용구 변경을 완전히 지정하는 데 중점을 둡니다. 이 개정은 6월 23일 '16에서 C++ 17 표준으로 받아 들여졌다 : http://developerblog.redhat.com/2016/07/13/red-hat-iso-c-standards-meeting-june-2016-core-language/

그래서 C++ (17)의 도착과 함께 당신이 template <typename T, T t> 관용구 및 사용을 처리 할 수있을 것입니다 :

template <auto t> 
struct tpl{ 
    tpl(){ cout << typeid(decltype(t)).name() << ": " << t << endl; } 
}; 
+1

궁금한 점이 있으면 Visual Studio는'type_info :: raw_name()'을 사용하여 mangled 이름을 출력합니다.이 이름은 GCC가'type_info :: name()'에 출력하는 이름과 비슷합니다. –

+0

이것은'f ()'이 'f ()'과 다른 함수를 호출하여 템플릿 유형에 과부하가 걸릴 수 있음을 의미합니까? –

+1

@JimV 당신이 말하는 것은 전문화입니다. (그리고 지금 가능합니다.)이 질문은'template '관용구에 관한 것입니다. 여기서 'tpl '을 호출해야하는데, '13'은 명백히 'int'입니다. N4469는 우리가'tpl <13>'을 호출하고 * type *와 * value template 인자 모두로 * 사용할 수있게하려고한다. –

관련 문제