在样本中:
#include <iostream>
using namespace std;
class B
{
public:
virtual void pvf() = 0;
};
template <class T>
class D : public B
{
public:
D(){}
virtual void pvf() {}
private:
string data;
};
template <>
class D<bool> : public B
{
public:
D();
virtual void pvf(){ cout << "bool type" << endl; }
};
int main()
{
D<int> d1;
D<bool> d2;
}
我收到以下错误:
test.cpp:(.text+0x1c): undefined reference to `D<bool>::D()'
请注意,我不只是专门化 D() 本身的原因是我想消除对字符串的需要D<T>::data
in the D<bool>
case.
为什么我需要重新实施D()
in D<bool>
?似乎我应该有一种方法告诉编译器使用来自的版本D<T>
.
有没有什么方法可以进行这样的简单专业化而无需重新实现方法?
类模板的每个特化都会给出一个不同的类 - 它们彼此不共享任何成员。由于您已经显式地专门化了整个类,因此您不会从模板中获取任何成员,并且必须实现它们全部。
您可以显式地专门化单个成员,而不是整个类:
template <> void D<bool>::pvf(){ cout << "bool type" << endl; }
Then D<bool>
仍将包含您尚未显式专门化的类模板的所有成员,包括默认构造函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)