テンプレート関数を明示的にインスタンス化するにはどうすればよいですか? 質問する

テンプレート関数を明示的にインスタンス化するにはどうすればよいですか? 質問する

引数が 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

テンプレートの後の山括弧に注意してください。

おすすめ記事