重複の可能性:
C ++テンプレート関数定義を.CPPファイルに保存
するテンプレートをヘッダーファイルにのみ実装できるのはなぜですか?
テンプレートクラスの実装と宣言を同じヘッダーファイルに含める必要があるのはなぜですか?
私は3つのファイルを持っています。1つは、base.hで、テンプレートを利用するメンバーがいるクラスがあります。
class Base {
protected:
template <class T>
void doStuff(T a, int b);
};
base.cppで、Base :: doStuff()を実装します。
#include "base.h"
template <class T>
void Base::doStuff(T a, int b) {
a = b;
}
次に、これをプロジェクトの別のクラスで使用しようとします。
#include "base.h"
void Derived::doOtherStuff() {
int c;
doStuff(3, c);
}
しかし、「doStuff(int、int)」が見つからないことを示すリンクエラーが発生します
私が見たところ、これはC ++ 03では、この関数の実装をヘッダーファイルに移動しないと不可能です。これを行うためのクリーンな方法はありますか?(C ++ 11x機能を使用しても問題ありません)。