gpt4 book ai didi

C++ 模板类特化 : why do common methods need to be re-implemented

转载 作者:IT老高 更新时间:2023-10-28 22:33:32 26 4
gpt4 key购买 nike

在示例中:

#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 的需要。在 D<bool>案例。

为什么需要重新实现D()D<bool> ?似乎应该有一种方法让我告诉编译器使用 D<T> 中的版本.

有没有什么方法可以做这样一个简单的特化而不必重新实现方法?

最佳答案

类模板的每个特化都提供一个不同的类——它们之间不共享任何成员。由于您已经明确地专门化了整个类,因此您不会从模板中获取任何成员,并且必须全部实现它们。

您可以明确地专门化个别成员,而不是整个类:

template <> void D<bool>::pvf(){ cout << "bool type" << endl; }

然后 D<bool>仍将包含您尚未明确特化的类模板的所有成员,包括默认构造函数。

关于C++ 模板类特化 : why do common methods need to be re-implemented,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8789867/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com