sách gpt4 ai đã đi

c++ - 多层上的模板化类未知类型

In lại 作者:行者123 更新时间:2023-11-28 02:33:36 25 4
mua khóa gpt4 Nike

我有以下类 Foo 和 FooBase:

class FooBase
{
công cộng:
virtual void A() = 0;
};

template
class Foo : public FooBase
{
công cộng:
virtual void A() {}
riêng tư:
T mT;
};

FooBase 在这里有一个不需要知道类型的实例,所以我可以做某事。像这样:

FooBase *foo = new Foo();

相当标准。现在的问题是:我想把同样的事情提升到一个新的水平。

所以我上课了:

template 
class Bar : public Foo
{
công cộng:
virtual void B() {}
};

当然可以使用:

Bar *bar = new Bar();

除非我不知道模板类的类型。所以最初的想法是执行以下操作:

class BarBase : public FooBase
{
công cộng:
virtual void B() {}
};

template
class Bar : public BarBase, Foo
{
};

所以我可以执行以下操作:

BarBase *bar = new Bar();

由于显而易见的原因,这行不通 - 现在的问题是:如何获得某物。喜欢这样工作吗?

1 Câu trả lời

Bạn có thể sử dụng虚拟继承 解决这个问题。此功能可确保在实例化子类时只有一个虚拟继承基类的实例。对于您的示例,这看起来像:

class FooBase
{
công cộng:
virtual void A() = 0;
};

template
class Foo : public virtual FooBase
// ^^
{
công cộng:
virtual void A() {}
riêng tư:
T mT;
};

class BarBase : public virtual FooBase
// ^^
{
công cộng:
virtual void B() {}
};

template
class Bar : public BarBase, Foo
{
};

现在您可以愉快地创建您想要的实例了:

BarBase *bar = new Bar();

关于c++ - 多层上的模板化类未知类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28276473/

25 4 0
Bài viết được đề xuất: Tệp tiêu đề C++ (cơ bản)
Bài viết được đề xuất: c++ - 在 boost::lambda 中使用 static_cast
Bài viết được đề xuất: javascript - 刷新页面时空白页面 [因为 bootstrap css]
Bài viết được đề xuất: c++ - C++ 新手,编码语法
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com