Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何创建C++;抽象类中的虚拟函数,允许返回任何类型_C++_Templates_Virtual_Abstract - Fatal编程技术网

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

C++ 如何创建C++;抽象类中的虚拟函数,允许返回任何类型,c++,templates,virtual,abstract,C++,Templates,Virtual,Abstract,我编写了一个抽象类A 是否有可能创建一个虚拟函数value(),当我们创建一个派生类B时,它将返回“whatever”,并在这里实现函数value()并从中返回任何内容 以下是我的意图的示例和解释: class A { public virtual void value() = 0; }; template < class T > class B : public A { private T content; public T value() { retur

我编写了一个抽象类
A

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

以下是我的意图的示例和解释:

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

template < class T >
class B : public A {
    private T content;
    public T value() { return content; };
};
A类{
公共虚空值()=0;
};
模板
B类:公共A{
私有内容;
公共T值(){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 );
std::vector容器;
Bbint;
Bbstring;
Bmonkey;
容器。推回(bint);
容器。推回(B环);
容器。推回(bmonkey);
有解决这个问题的办法吗,还是有其他更好的办法


提前感谢。

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

重写的返回类型必须是基类函数的返回类型

共同变量类型可以由编译器用另一种类型的类型“替换”。这对您来说意味着基类需要返回某些内容,而重写必须返回可转换为该内容的内容

在您的例子中,您正在从基返回
void
,并且除了
void
之外,没有任何东西与
void
是同一变体——因此,如前所述,只能从派生类方法返回
void


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

在C++中,只有虚拟函数的共变返回类型才是更多。如果基类成员返回一个类型,那么添加到Alok的注释中,派生类成员必须返回该类型的内容,但可以更具体(从原始返回的类型派生)。你想过让所有你想要返回的对象都从一个公共的父类型继承吗?