在我的一个小项目中,我有这样的情况:
// 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;
}
这段代码编译得很好但无法链接,因为在主文件中链接器无法找到AClass的实现,除非我将它添加到cpp文件中:
template class AClass<int>;
但这只是愚蠢的,因为它消除了使用模板的优势。
现在的问题是: 有没有办法解决链接问题而不使用cpp文件中的类转发,或者这是不可能在单独的.h文件和.cpp文件中有这样的东西?放弃前瞻性声明对我来说不是一个选择。
我真的想对此有一些澄清。
由于