2009-08-18 4 views
11

내가 템플릿 기능이 포인터합니다. 나는이를 컴파일 할 때 : 기능 템플릿 특수화는

template<> 
void foo<char*>(const char*& value) { bar(value); x = 2; } 

는 오류가 발생합니다 :

error C2912: explicit specialization; 'void foo(const char *&)' is not a specialization of a function template 

는 그것을 typedef'ing없이 char* 포인터 타입 매개 변수를 전문으로 할 수 있습니까?

답변

20

확실히. 이 시도 :

template<> 
void foo<char*>(char* const& value) {...} 

이것은 const char*const charchar을하지 않는 const 포인터를 포인터를 의미하기 때문이다.

+0

이 작업을 수행 할 수도 있습니다. 나는 그것이 필요'지정할 찾는 아니에요하지만 '템플릿 <> 무효 foo는 (CONST의 char *의 CONST 및 값) {...}'방식의 이 종류는, 나를 위해 작동 ' 'foo' 다음에. – Alan

3

일반적으로 기능 템플릿 전문화를 피하면됩니다. 대신 템플릿 외 과부하를 제공하면 문제가 훨씬 줄어 듭니다. 더 읽기 : Why Not Specialize Function Templates?

+0

네, 직접 깨닫고 과부하를 사용하도록 재 설계되었습니다. – pingw33n