基本上我想做的就是有一个纯虚方法,返回一个任意具体类型集合的迭代器,例如伪代码如下:
这个类的用户实际上并不关心子类使用了哪种实现,可以是set、vector、list、array等等。
我知道
virtual Iterator<T> getIterator() const = 0;
这个类的用户实际上并不关心子类使用了哪种实现,可以是set、vector、list、array等等。
我知道
std::iterator
类,但我找不到一种正确的方法来指定它,以便与简单的vector一起使用。virtual std::iterator<std::random_access_iterator_tag,T> getIterator() const = 0;
myVector.begin() // compilation error in implementation
定义带有 const T
作为类型参数的 std::iterator
并没有起作用。我也尝试过保留 T
,而是将指针和引用类型定义为 const T*
和 const T&
。
通过查看 std::vector
的实现,我发现 std::vector::const_iterator
实际上派生自 _Iterator012
,后者又派生自 _Iterator_base
。
让我很困扰的是,在 std 中没有任何方法可以使用任意集合。像在 <algorithm>
中那样将我的类实现为模板对我来说不是一个选项,原因有两个:
- 无法控制实际值类型
- 我只是不想让我的类变成模板,这会使我的设计更加复杂,使事情变得不太灵活。
所使用的类型参数 T
只是为了演示,实际上这是一个具体类型。