関数テンプレートを部分的に特殊化することはできませんが、標準的な関数のオーバーロードも理解しています。関数の特殊化/オーバーロードのルールの例
私が助けが必要なのは、以下の4つのfoo()関数の違いを突き止めることです。私はそれらのいくつかがまったく同じものの構文が異なることを期待していますか?
誰かが各機能について正確に何が起こっているのかは、それがテンプレートの特殊化または過負荷ですか、そしてどのようにして呼び出すべきかをC++コンパイラが決定するのでしょうか?
//(1)
template<typename T>
void foo(T t)
{
cout << "template<T> foo(T) " << endl;
}
//(2)
template<>
void foo<int*>(int* l)
{
cout << "template<> foo<int*>(int*) " << endl;
}
//(3)
template<typename T>
void foo(T* l)
{
cout << "template<T> foo(T*) " << endl;
}
//(4)
void foo(int* l)
{
cout << "normal overload foo(int*) " << endl;
}
int main()
{
int x = 0;
foo(x);
foo(&x);
return 0;
}
プログラム出力:コメント欄で
template<T> foo(T)
normal overload foo(int*)
@ Rakete1111あなたは正しいです。編集されました。 – Jordan