在Class.h
:
class Class {
public:
template <typename T> void function(T value);
};
在Class.cpp
:
template<typename T> void Class::function(T value) {
// do sth
}
在main.cpp
:
#include "Class.h"
int main(int argc, char ** argv) {
Class a;
a.function(1);
return 0;
}
我收到链接错误,因为Class.cpp
从未实例化void Class::function<int>(T)
。
您可以使用以下命令显式实例化模板类:
template class std::vector<int>;
如何显式实例化非模板类的模板成员?
谢谢,
答案 0 :(得分:46)
您可以在Class.cpp
中使用以下语法:
template void Class::function(int);
模板参数可以省略,因为类型推导,适用于函数模板。因此,以上内容相当于以下内容,更简洁:
template void Class::function<int>(int);
请注意,没有必要指定函数参数的名称 - 它们不是函数(或函数模板)签名的一部分。
答案 1 :(得分:6)
您是否尝试过使用Class.cpp
中的以下内容?
template void Class::function<int>(int value);