所以基本上我想做的是有一个纯虚方法将迭代器返回到具体类型的任意集合,例如在伪代码中:
virtual Iterator<T> getIterator() const = 0;
这个类的用户实际上并不关心子类使用什么实现。它可以是集合、向量、列表、数组等。
我知道这个std::iterator
类,但我找不到正确指定它的方法,以便使用简单的向量。
virtual std::iterator<std::random_access_iterator_tag,T> getIterator() const = 0;
myVector.begin() // compilation error in implementation
定义std::iterator
为const T
类型参数也没有奏效。我还尝试离开T
,而是将指针和引用类型定义为const T*
and const T&
。
通过查看实现,std::vector
我发现它std::vector::const_iterator
实际上源自_Iterator012
._Iterator_base
没有任何方法可以处理 std 中的任意集合,这真的让我很困扰。由于两个原因,将我的类实现为模板<algorithm>
对我来说不是一个选项:
- 无法控制实际值类型
- 我只是不想让我的类模板使我的设计复杂化很多并且让事情变得不那么灵活。
使用的类型参数T
只是为了演示,实际上这是一个具体的类型。