c++ - 类中成员函数模板的显式实例化

标签 c++ class templates instance

我有一个包含模板方法的类,在标题中声明如下:

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/

相关文章:

python - "if self:"是什么意思?

java - 如何用delphi xe5扩展android类

c++ - 包含模板类型的头文件

c++ - 对两个构造函数使用 'this' 指针

c++ - Try, Throw, Catch 函数

java - 当另一个类中的 JLabel 更新时如何更新 JLabel?

c++ - 如何从嵌套的 std::initializer_list 初始化 2D C 样式数组?

c++ - 创建新的原始类型

c++ - jsoncpp中区分int和uint类型

c++ - 从库中查找 argc 和 argv