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 charconstchar

于 2009-08-18T22:33:23.250 に答える
3

通常、関数テンプレートの特殊化は避けるべきです。代わりにテンプレート以外のオーバーロードを提供すると、問題がはるかに少なくなります。続きを読む:なぜ関数テンプレートを特化しないのか?

于 2009-08-18T23:17:29.183 に答える