C++模板类特化:为什么公共方法需要重新实现

2024-02-14

在样本中:

#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(使用前将#替换为@)

C++模板类特化:为什么公共方法需要重新实现 的相关文章

随机推荐