我有一个模板功能:
template<typename T>
void foo(const T& value) { bar(value); x = -1; }
我想将它专门用于一组类型:
template<>
void foo<char>(const char& value) { bar(value); x = 0; }
template<>
void foo<unsigned char>(const unsigned char& value) { bar(value); x = 1; }
一切正常。当我编译它时:
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
是否可以专门使用char*
指针类型参数而不用typedef?它?
答案 0 :(得分:20)
不确定。试试这个:
template<>
void foo<char*>(char* const& value) {...}
这是因为const char*
表示指向const char
的指针,而不是指向const
的{{1}}指针。
答案 1 :(得分:3)
您通常应该避免使用函数模板特化:如果您提供非模板重载,则会遇到更少的问题。阅读更多:Why Not Specialize Function Templates?