1. ホーム
  2. c++

[解決済み] C++テンプレート関数定義の.CPPファイルへの格納

2022-03-16 21:14:54

質問

ヘッダーにインラインではなく、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::string に対してのみ使用されます。

質問ですが、これは厄介なハックなのでしょうか、それとも他のコンパイラやリンカで動作するのでしょうか?今のところ、このコードはVS2008でしか使っていませんが、他の環境にも移植したいと思っています。

解決方法は?

この問題は、ヘッダーにテンプレートを定義するか、上記の方法で解決することができます。

の以下の点を読んでおくことをお勧めします。 C++ FAQ Lite :

これらの(そして他の)テンプレートの問題について、かなり詳しく説明してくれています。