首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在抽象类中创建允许返回任何类型的C++虚函数

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

Stack Overflow用户
提问于 2013-06-13 22:27:19
回答 2查看 163关注 0票数 0

我编写了一个抽象类A

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

下面是一个例子,并解释了我的意图:

代码语言:javascript
运行
复制
class A {
    public virtual void value() = 0;
};

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

正如您所看到的,我正在尝试创建一个通用容器,它尤其适用于这种情况:

代码语言:javascript
运行
复制
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 );

有没有解决这个问题的办法,或者有其他更好的办法?

提前谢谢你。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-13 22:45:23

重写的返回类型必须与基类函数的返回类型一致( co-variant )。

协变类型可以由编译器用另一个类型的类型“替换”。这对你来说意味着基类需要返回一些东西,覆盖必须返回一些可以转换的东西。

在本例中,您将从基类返回void,并且除了void之外,没有其他东西与void是协变的--因此,正如所编写的,派生类方法只能返回一个void

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

票数 1
EN

Stack Overflow用户

发布于 2013-06-13 22:32:58

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17089645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档