C++ テンプレート関数定義を .CPP ファイルに保存する 質問する

C++ テンプレート関数定義を .CPP ファイルに保存する 質問する

ヘッダーにインラインで保存するのではなく、CPP ファイルに保存したいテンプレート コードがあります。どのテンプレート タイプが使用されるかがわかっていれば、これが実行できることはわかっています。例:

.h ファイル

class foo
{
public:
    template <typename T>
    void do(const T& t);
};

.cpp ファイル

template <typename T>
void foo::do(const T& t)
{
    // Do something with t
}

template void foo::do<int>(const int&);
template void foo::do<std::string>(const std::string&);

最後の 2 行に注意してください。foo::do テンプレート関数は int と std::strings でのみ使用されるため、これらの定義はアプリがリンクされることを意味します。

私の質問は、これは厄介なハックなのか、それとも他のコンパイラ/リンカーでも動作するのかということです。現時点ではこのコードを VS2008 でのみ使用していますが、他の環境に移植したいと考えています。

ベストアンサー1

あなたが説明した問題は、ヘッダーでテンプレートを定義するか、上で説明したアプローチによって解決できます。

以下の点をお読みください。C++ FAQ ライト:

これらの(およびその他の)テンプレートの問題について詳細に説明しています。

おすすめ記事