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

How to create a C++ virtual function in abstract class allowing to return any kind of type

本文关键字:任何 返回 类型 函数 c++ 许返回 一个 抽象类 创建      更新时间:2023-10-16

我已经编写了一个抽象类A

是否有可能创建一个虚拟函数value(),它将返回"任何",当我们创建一个派生类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 );

有解决办法吗?还是有其他更好的解决办法?

提前感谢。

重写的返回类型必须与基类函数的返回类型协变。

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

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

既然你试图写一个泛型类,可以用来存储"任何东西"在容器中,我建议你看看Boost。变体或增强。任何。从头开始编写一个变类型类是非常困难的,这是一个已经发明的轮子。

您仍然可以查看boost::any或boost::variant

相关文章: