関数のテンプレートに取り組んでいました。簡単にするために、次のようになります。
template < typename T >
void f(const T & x)
{
cout << "generic case" << endl;
cout << x << endl;
}
私は常に、C 文字列をテンプレート パラメーターの引数として使用できないと考えていました。しかし、以下は実際に機能します (g++ 4.5.1 を使用):
f("hello world");
私の質問は次のとおりT
ですf("hello world")
。
正確に何が起こっているのかを特定しようとしました。たとえば、私char[]
はconst char*
これを見たので(明らかに機能しません):
template < typename T >
void f(const T & x)
{
cout << "generic case" << endl;
cout << x << endl;
}
template <>
void f(const const char * T & x)
{
cout << "char[] case" << endl;
cout << x << endl;
}
いくつかのバリエーションを試しました。それらのどれも機能しません。
ASIDE:私がやっていることには、これは本当に必要ありません。T = "C-string" の場合の特殊化が必要なので、別のテンプレート関数を書きました:
template < typename T >
void f(const T & x)
{
cout << "generic case" << endl;
cout << x << endl;
}
template < typename T >
void f(T x[])
{
cout << "T[] case" << endl;
cout << x << endl;
}
正確に何が起こっているのか、私が読んだことではできないと言われているのに、なぜC文字列をテンプレート引数にすることができるのか知りたいので、私はただ尋ねています。テンプレートについて読み間違えた/誤解したに違いありません。