我尝试创建和使用模板类,如下所示:
ClassA.h
#ifndef CLASSA_H
#define CLASSA_H
template <class T>
class ClassA
{
public:
ClassA(T value);
T getValue();
private:
T value;
};
#endif /* CLASSA_H */
ClassA.cpp
#include "ClassA.h"
template<class T>
ClassA<T>::ClassA(T value) : value(value)
{
}
template<class T>
T ClassA<T>::getValue()
{
return value;
}
现在,要实际使用此模板类,我必须使用我将要使用的类型实例化类模板,如下所示:
template class ClassA<int>;
我宁愿不在类头中有这个实例化,因为该类是通用的,我希望(原则上)将它用于任何类型。所以我试着把它放在我的main.cpp
:
#include <iostream>
#include "ClassA.h"
template class ClassA<int>;
int main(int argc, char** argv)
{
ClassA<int> a(1337);
std::cout << a.getValue() << std::endl;
return 0;
}
但是现在,编译器会出现以下错误:
main.cpp:10:未定义引用`ClassA :: ClassA(int)&#39;
我有来实例化类头中的模板类吗?或者我可以在其他地方实例化它吗?我可以在main.cpp
中实例化它吗?如果不是,为什么不呢?
编辑:将此标记为重复时引用的问题表明您可以使用显式实例化。不在哪里,这就是我在这里问的问题。