我编写了一个抽象类A
。
有没有可能创建一个虚函数value()
,它将返回“when”,并且当我们创建一个派生类时,在这里实现函数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 );
有没有解决这个问题的办法,或者有其他更好的办法?
提前谢谢你。
发布于 2013-06-13 22:45:23
重写的返回类型必须与基类函数的返回类型一致( co-variant )。
协变类型可以由编译器用另一个类型的类型“替换”。这对你来说意味着基类需要返回一些东西,覆盖必须返回一些可以转换的东西。
在本例中,您将从基类返回void
,并且除了void
之外,没有其他东西与void
是协变的--因此,正如所编写的,派生类方法只能返回一个void
。
由于您正在尝试编写一个可用于在容器中存储“任何内容”的泛型类,因此我建议您查看一下Boost.Variant或Boost.Any。从头开始编写一个变体类型的类是非常困难的,这是一个已经发明出来的轮子。
发布于 2013-06-13 22:32:58
您仍然可以查看boost::any或boost::variant
https://stackoverflow.com/questions/17089645
复制相似问题