12

我有一个模板功能:

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*指针类型参数而不使用类型定义?

4

2 回答 2

20

当然。试试这个:

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

这是因为const char*表示指向 的指针const char,而不是指向 的const指针char

于 2009-08-18T22:33:23.250 回答
3

您通常应该避免函数模板特化:如果您提供非模板重载,那么问题就会少得多。阅读更多:为什么不专门化函数模板?

于 2009-08-18T23:17:29.183 回答