引数が 1 つあるテンプレート関数があります。その関数を呼び出さずにその関数をインスタンス化する必要がありますが、これは明示的にインスタンス化する必要があることを意味します。
この機能があります:
template <class T> int function_name(T a) {}
私はその関数を次のようにインスタンス化しました:
template int function_name<int>(int);
しかし、次のエラーが発生しました:
error: expected primary-expression before 'template'
error: expected `;' before 'template'
ベストアンサー1
[編集 2]: コードのフォーマットの問題により、元の質問のコードに関して混乱があったことに注意してください。詳細については、AnthonyHatchkins の回答を参照してください。
本当に関数をインスタンス化したい場合(特殊化などではなく)、次のようにします。
template <typename T> void func(T param) {} // definition
template void func<int>(int param); // explicit instantiation.
[編集] 明示的なインスタンス化と特殊化に関して(多くの)混乱があるようです。私が上に投稿したコードは、明示的なインスタンス化の構文は専門分野異なります。特殊化の構文は次のとおりです。
template <typename T> void func(T param) {} // definition
template <> void func<int>(int param) {} // specialization
テンプレートの後の山括弧に注意してください。