因此,在将模板显式实例化与完整模板类专门化一起使用时,出现了未定义的参考错误,但问题是,部分模板类专门化进行得很好而没有错误。
代码如下所示,有人知道为什么吗?在这种情况下,完全专业化和部分专业化有什么区别?
谢谢。
// t.h
#include <iostream>
using namespace std;
template <typename T1, typename T2>
class A {
public:
void foo();
};
// t2.cpp
#include "t.h"
template<typename T1>
class A<T1, int> {
public:
void foo() {
cout << "T1, int" << endl;
}
};
template<>
class A<int, int> {
public:
void foo() {
cout << "int, int" << endl;
}
};
template class A<float, int>;
template class A<int, int>;
// t.cpp
#include "t.h"
int main() {
A<float, int> a;
a.foo(); // no error
A<int, int> a1;
a1.foo(); // undefined reference error, why?
return 0;
}
在gcc 4.8.5中,编译命令为g++ t.cpp t2.cpp -o t
。