在C ++中IEnumerable?

时间:2011-02-01 17:53:09

标签: c++ iterator enumeration

我想知道是否有一种常用的方法来表示C ++中的高级列表类对象,除了使用STL迭代器。 (高级别是指一些复杂的对象,比如数据库响应,而不是低级别的向量)。可能类似于C#的IEnumerable。如果你看过任何使用它的项目,你能给我一个参考吗?感谢。

编辑:澄清为什么我对此感兴趣,而不是问题的一部分。正如评论中所提到的,这里有一些代码解释了我在编译时多态性和运行时多态之间看到的关键差异。想象一下,你有一个编译时多态类型,这基本上意味着你有两种类型,它们有一个共同的概念(不是接口)。如果要将算法应用于此多态类型,则 将是通用的:

template<class iterator>
void myalgorithm(iterator iter) {...}

但是当你有一个带有接口的运行时多态类型时,比如说IMyIterator,就可以在其上编写“普通”非通用算法

void myalgorithm(IMyIterator* iter) {...}

实现这两个函数的最大区别在于使用接口与泛型类型的语言和IDE支持的不同级别。另一点是,不是每个人都熟悉模板编程,可能就是你。最后,第二种情况允许隐藏实现,而第一种情况只是标题。所以请不要告诉我他们之间没有区别,除非你能告诉我我错在哪里。

3 个答案:

答案 0 :(得分:2)

您可以使用SCARY iterators。数据库是SCARY迭代优于其中的示例之一。

然而,C#的IEnumerable<T>与STL迭代并没有什么不同,只是涉及的多态性是在运行时,而不是编译时。在它之上编写自己的运行时多态性应该不会太难。

答案 1 :(得分:1)

替代方案的一个例子是Qt4 introducing Java-Style iterators

QList<int> list;
...
QListIterator<int> i(list);
while (i.hasNext())
    sum += i.next();

答案 2 :(得分:0)

您还可以看到Boost::FOR_EACH它简化了迭代的语法。