我有一个包含模板方法的类,在标题中声明如下:
Class MyClass {
public :
template <class T>
int memberFunction(T& arg);
}
函数模板在.cpp中定义如下:
template<class T> int MyClass::memberFunction(T& arg){
return arg*arg + arg + 0.2;
}
并在cpp文件中实例化如下:
template
int MyClass::memberFunction<int>(int&);
template
int MyClass::memberFunction<double>(double&);
代码在 gcc 和 mscv 下编译,但每当我使用函数时,mscv 都会返回一条警告消息,要求显式实例化。 我试图将实例化放在 header 中,但它会引发错误,我应该怎么做?
最佳答案
您可以在 header 中提供显式实例化声明:
Class MyClass {
public :
template <class T>
int memberFunction(T& arg);
};
extern template
int MyClass::memberFunction<int>(int&);
extern template
int MyClass::memberFunction<double>(double&);
这个显式的实例化声明,虽然这里并不严格需要,但可能足以安抚 MSVC。
关于c++ - 类中成员函数模板的显式实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56769977/