如何在抽象类中创建一个允许返回任何类型的c++虚函数
How to create a C++ virtual function in abstract class allowing to return any kind of type
我已经编写了一个抽象类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
,并且只有void
与void
是协变的——因此,正如所写的,只能从派生类方法返回void
。
既然你试图写一个泛型类,可以用来存储"任何东西"在容器中,我建议你看看Boost。变体或增强。任何。从头开始编写一个变类型类是非常困难的,这是一个已经发明的轮子。
您仍然可以查看boost::any或boost::variant
相关文章:
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 模板化接口 - 创建一个泛型模板类以返回任何容器
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- C++ - 声明指向返回任何类型并获取任意数量参数的函数的指针
- 类和构造函数中的函数根本不起作用,并且不返回任何错误
- 为什么 c++ 中的 main() 函数不采用除 int 和 void 之外的任何其他返回类型
- f 是指向函数的指针,该函数采用 int,并返回指向不带任何内容并返回双精度的函数的指针
- 为什么套接字中的 recv() 函数不返回任何内容?
- C++如何使虚拟函数返回任何类型的指针
- 返回类型为struct的函数每次调用时都不返回任何内容
- 为什么函数的任何索引处的下标运算符在C++中总是返回1
- 此程序不返回任何内容
- 为什么我的变量在我尚未将其设置为任何值时返回一个值?
- std::ifstream.read() 不会向我的缓冲区返回任何内容
- 为什么即使输入相等,v3 也不会返回任何内容
- 函数使用任何输入返回 0
- 任何返回类型的可变参数函数包装器
- 当函数在 GCC 中没有任何返回时,如何强制执行错误?
- 编写一个模板函数,用于计算具有任何返回类型的 lambda 函数
- 如果一个指定返回类型为int的函数没有任何返回语句,即不返回值,它会返回垃圾值吗