从"外部"实例化类模板班级

时间:2017-03-08 18:19:43

标签: c++ templates

我尝试创建和使用模板类,如下所示:

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中实例化它吗?如果不是,为什么不呢?

编辑:将此标记为重复时引用的问题表明您可以使用显式实例化。不在哪里,这就是我在这里问的问题。

0 个答案:

没有答案