首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IEnumerable in C++?

IEnumerable in C++?
EN

Stack Overflow用户
提问于 2011-02-01 17:53:09
回答 3查看 2.7K关注 0票数 2

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

编辑:澄清为什么我对此感兴趣,而不是问题的一部分。正如注释中所问的,这里有一些代码解释了编译时多态性和运行时多态之间的关键区别。假设您有一个编译时多态类型,这基本上意味着您有两个具有公共概念(而不是接口)的类型。如果要对这种多态类型应用算法,则必须是泛型的:

代码语言:javascript
复制
template<class iterator>
void myalgorithm(iterator iter) {...}

但是,当您有一个具有接口的运行时多态类型时,比如IMyIterator,您可以在其上编写“正常”的非通用算法。

代码语言:javascript
复制
void myalgorithm(IMyIterator* iter) {...}

在实现这两个函数方面,最大的不同是语言和IDE对接口和泛型类型的支持程度不同。另一点是,并不是每个人都那么熟悉模板编程,就像您所熟悉的那样。最后,第二种情况允许隐藏实现,而第一种情况仅限于头。所以请不要告诉我他们之间没有区别,除非你能告诉我我错在哪里。

EN

回答 3

Stack Overflow用户

发布于 2011-02-01 18:04:54

你可以用可怕迭代器。数据库是给出的例子之一,给出了可怕的迭代擅长的地方。

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

票数 2
EN

Stack Overflow用户

发布于 2011-02-01 17:57:08

替代方案的一个例子是Qt4引入Java风格的迭代器

代码语言:javascript
复制
QList<int> list;
...
QListIterator<int> i(list);
while (i.hasNext())
    sum += i.next();
票数 1
EN

Stack Overflow用户

发布于 2011-02-01 18:02:25

您还可以看到每一个,它简化了迭代的语法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4866136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档