gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 02:33:36 24 4
gpt4 key购买 nike

我有以下类 Foo 和 FooBase:

class FooBase
{
public:
virtual void A() = 0;
};

template <class T>
class Foo : public FooBase
{
public:
virtual void A() {}
private:
T mT;
};

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

FooBase *foo = new Foo<int>();

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

所以我上课了:

template <class T>
class Bar : public Foo<T>
{
public:
virtual void B() {}
};

当然可以使用:

Bar<int> *bar = new Bar<int>();

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

class BarBase : public FooBase
{
public:
virtual void B() {}
};

template <class T>
class Bar : public BarBase, Foo<T>
{
};

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

BarBase *bar = new Bar<int>();

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

最佳答案

您可以使用虚拟继承 解决这个问题。此功能可确保在实例化子类时只有一个虚拟继承基类的实例。对于您的示例,这看起来像:

class FooBase
{
public:
virtual void A() = 0;
};

template <class T>
class Foo : public virtual FooBase
// ^^
{
public:
virtual void A() {}
private:
T mT;
};

class BarBase : public virtual FooBase
// ^^
{
public:
virtual void B() {}
};

template <class T>
class Bar : public BarBase, Foo<T>
{
};

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

BarBase *bar = new Bar<int>();

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

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