ヘッダーにインラインで保存するのではなく、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 ライト:
- テンプレート クラスの定義を宣言から分離して、.cpp ファイル内に配置できないのはなぜですか?
- テンプレート関数でリンカー エラーを回避するにはどうすればよいですか?
- C++ キーワード export はテンプレート リンカー エラーにどのように役立ちますか?
これらの(およびその他の)テンプレートの問題について詳細に説明しています。