【发布时间】:2021-12-31 10:05:48
【问题描述】:
我想要一个包含返回可迭代对象(容器?)的方法的虚拟基类(接口)。实现类将各自处理它们的容器,例如,A 类将容器实现为向量,B 类实现为列表等。
基本上,我想做这样的事情:
class Base{
virtual Container getContainer() = 0;
}
class A:Base{
Vector v;
Container getContainer() {return v;}
}
A a;
Iterator begin = a.getContainer().begin;
Iterator end = a.getContainer().end;
如中,调用者将负责处理迭代器(例如调用开始和结束函数进行迭代)
我认为这样的事情是可能的,但我不知道该怎么做。具体来说,我假设 vector 和 list 等类继承自定义方法 begin() 和 end() 的通用接口,但我无法弄清楚该接口是什么以及如何处理它。
【问题讨论】:
-
查找类型擦除。
-
您不能以这种方式抽象标准容器,因为它们没有通用的基类。容器的规范基于每个容器提供一个接口(例如一组特定的成员函数),但是,尽管所有接口中都有一些共同的元素,但不同的容器没有相同的接口 - 并且没有共同的基类标准容器(在 c++ 标准库中)和用户定义的容器需要继承自。
标签: c++ inheritance iterable