在Class.h
:
class Class {
public:
template <typename T> void function(T value);
};
Run Code Online (Sandbox Code Playgroud)
在Class.cpp
:
template<typename T> void Class::function(T value) {
// do sth
}
Run Code Online (Sandbox Code Playgroud)
在main.cpp
:
#include "Class.h"
int main(int argc, char ** argv) {
Class a;
a.function(1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到一个链接错误,因为Class.cpp
从未实例化void Class::function<int>(T)
.您可以使用以下命令显式实例化模板类:
template class std::vector<int>;
Run Code Online (Sandbox Code Playgroud)
如何显式实例化非模板类的模板成员?
谢谢,
给出以下代码:
#include <memory>
#include <iostream>
using namespace std;
template<typename T>
void test(T & value) {
cout << "most generic" << endl;
}
template<typename T>
void test(shared_ptr<T> & value) {
cout << "shared_ptr" << endl;
}
class A {};
int main(int argc, char ** argv) {
A a;
shared_ptr<A> p(new A());
test(a);
test(p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么打电话
test(p)
Run Code Online (Sandbox Code Playgroud)
使用T = A实例化第二种形式的测试,而不是抱怨它无法区分这两个签名?