例如,C++不会实例化模板T = Hoge&.
一个最小的例子:
hoge.h:
#include<cstdio>
class Hoge
{
public:
Hoge()
: hoge(0)
{
}
~Hoge()
{
}
int hoge;
void print() { printf("%d\n", hoge); }
};
template<typename T>
void f(T a);
Run Code Online (Sandbox Code Playgroud)hoge.cpp:
#include "hoge.h"
template<typename T>
void f(T a)
{
a.print();
}
template void f<Hoge &>(Hoge &a);
Run Code Online (Sandbox Code Playgroud)main.cpp:
#include "hoge.h"
int main(void)
{
Hoge h;
f(h);
return 0;
}
Run Code Online (Sandbox Code Playgroud)我编译了这些:g++ -std=c++11 main.cpp hoge.cpp.但它给出了链接器错误:
Undefined symbols for architecture x86_64:
"void f<Hoge>(Hoge)", referenced from: …Run Code Online (Sandbox Code Playgroud)