関数を明示的にインスタンス化し、T
set toで呼び出す場合は、それをテンプレート引数としてint
渡す必要があります: .int
foo<int>
type の「通常の」パラメーターを 1 つ使用して関数を宣言したため、これは「通常の」引数を指定する言い訳にはなりませんT
。
したがって、foo
明示的に指定されたテンプレート引数を使用した有効な呼び出しは、次のようになります。
foo<int>(0);
foo<int>(true);
foo<int>('a');
(テンプレート引数を明示的に指定する目的は、テンプレート引数推定メカニズムをオーバーライドすることです)。
その「通常の」パラメーターを架空のものとして保持することが意図されている場合 (名前を付けることさえしなかったため)、デフォルトの引数を指定できます。
template<typename T> void func(T = T())
{
std::cout << typeid(T).name() << std::endl;
}
その場合、関数は次のように呼び出し可能になります
foo<int>();
または、通常のパラメーターを完全に取り除くことができます (とにかく関数内で使用していないため)。
template<typename T> void func()
{
std::cout << typeid(T).name() << std::endl;
}
ただし、これにより、常にテンプレート引数を明示的に指定する必要があります。
他に考えていることがあれば、それが何であるかを説明する必要があります。