私の小さなプロジェクトでは、次のような状況があります。
// Header file
template <typename T>;
class AClass
{
public:
virtual void doSomething() const;
private:
std::vector<T> *v;
};
// separate cpp file
template <typename T>
void AClass<T>::doSomething() const
{
// use the vector here
}
// main.cpp
#include "AClass.h"
int main()
{
AClass<int> anObject;
anObject.doSomething();
return 0;
}
このコードは正常にコンパイルされますが、リンクできません。これを cpp ファイルに追加しない限り、メイン ファイルでリンカーが AClass の実装を見つけることができないためです。
template class AClass<int>;
しかし、それはテンプレートを使用する利点を奪うので、ばかげています。
ここで質問: cpp ファイルでクラス転送を使用せずにリンクの問題を解決する方法はありますか、それとも別の .h ファイルと .cpp ファイルにこのようなものを含めることは不可能ですか? クラス宣言を前方に置くことは、私にとってオプションではありません。
これについて明確にしたいと思います。
ありがとう