在我的一个小项目中,我遇到了这样的情况:
// 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 文件中有类似的东西?提出前向类声明对我来说不是一个选择。
我真的很想对此进行澄清。
谢谢