gpt4 book ai didi

c++ - 如何在抽象类中创建允许返回任何类型的 C++ 虚函数

转载 作者:行者123 更新时间:2023-11-28 03:15:20 25 4
gpt4 key购买 nike

我编写了一个抽象类A

是否有可能创建一个虚函数value(),它将返回“whatever”,当我们创建一个派生类B时,在这里实现函数 value() 并从中返回任何东西?

这是我的意图的示例和解释:

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

template < class T >
class B : public A {
private T content;
public T value() { return content; };
};

如您所见,我正在尝试创建一个通用容器,特别是在这种情况下可以使用它:

std::vector< A > container;
B< int > bint;
B< std::string > bstring;
B< zoo::monkey > bmonkey;
container.push_back( bint);
container.push_back( bstring );
container.push_back( bmonkey );

是否有解决方案或其他更好的解决方案?

提前谢谢你。

最佳答案

覆盖的返回类型必须是co-variant到基类函数。

协变类型可以被编译器“替换”为另一种类型。这对您来说意味着基类需要返回一些东西,而重写必须返回一些可转换为它的东西。

在你的例子中,你从基础返回 void,只有 voidvoid 是协变的——因此,如所写,只能从派生类方法返回 void

由于您正在尝试编写可用于在容器中存储“任何东西”的通用类,我建议您查看 Boost.VariantBoost.Any .从头开始编写一个变体类非常困难,而且是一个已经被发明出来的轮子。

关于c++ - 如何在抽象类中创建允许返回任何类型的 C++ 虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17089645/

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