2011-01-09 4 views
0

정규 C 스타일 문자열을 허용하는 템플릿 전문화에 대한 올바른 구문을 얻는 데 어려움이 있습니다. C 스타일 문자열의 템플릿 전문화

namespace RubyUtils 
{ 
    template<class T> VALUE toValue(const T& v); 
}; 

template<> VALUE toValue(char const* & v) 
{ 
    return toValue<string>(v); 
} 

다음 호출 사이트

return RubyUtils::toValue("Life the universe and everything"); 

에서 예를

를 들어

unresolved external symbol "unsigned long __cdecl RubyUtils::toValue<char const [33]>(char const (&)[33])" 

가 어떻게 C 스타일 문자열을 전달 가능하게 할 수있는 전문성을 구성해야 오류를 준다?

UPDATE :는 올바른 구문 템플릿 => 템플릿을 가지고 템플릿 전문화를 고정 <>

+1

두 템플릿이 모두 네임 스페이스에없는 이유는 무엇입니까? – Jon

답변

1

난 당신이 발생하고있는 문제는 아마 두 개의 템플릿을 정의 한 사실과 관련이 있다고 생각 - 하나 네임 스페이스의 내부, 그리고 하나. 오류는이 혼동으로 인한 것 같습니다.

하지만 더 중요한 것은, 일반적으로 이 아니며은 기능 템플릿을 특수화하려고합니다. 함수에 대한 템플릿 전문화에는 거의 보편적으로 잘못된 것을 호출하는 펑키 규칙이 많이 있습니다. 오히려, 그냥 평범한 함수 오버로드를 사용

namespace RubyUtils 
{ 
    template<class T> VALUE toValue(const T& v); 
    VALUE toValue(char const* v) 
    { 
     return toValue<string>(v); 
    } 
}; 

방법 기능은 기본적으로 일을, 비 템플릿 toValue 앞서 toValue 템플릿의 선택 얻을하게됩니다 C 스타일 문자열로 toValue 함수를 호출, 작품의 과부하 당신을위한 전문화. 일반적으로 함수 템플릿을 사용하면 전문화에 과부하를 사용하는 것이 더 좋습니다. 그것은 단지 더 안전합니다.

관련 문제