c++ - C++ 中的 IEnumerable?

标签 c++ iterator enumeration

我想知道是否有一种通用方法可以在 C++ 中表示高级列表类对象,除了使用 STL 迭代器。 (我所说的高级是指一些复杂的对象,例如数据库响应,而不是低级 vector )。可能类似于 C# 的 IEnumerable。如果您见过任何使用此的项目,可以给我一个引用吗?谢谢。

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

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

但是当你有一个带有接口(interface)的运行时多态类型时,比如IMyIterator,你可以在上面编写“正常”的非泛型算法

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

实现这两个函数的最大区别是使用接口(interface)与泛型类型的语言级别和 IDE 支持不同。另一点是,并不是每个人都像您一样熟悉模板编程。最后,第二种情况允许隐藏实现,而第一种情况仅包含 header 。所以请不要告诉我它们之间没有区别,除非你能告诉我哪里错了。

最佳答案

您可以使用SCARY iterators 。数据库是 SCARY 迭代擅长的示例之一。

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

关于c++ - C++ 中的 IEnumerable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4866136/

相关文章:

C++:_beginthreadex,线程函数名称未显示在 Visual Studio 线程窗口中

c++ - 线程中 OpenCv 3.2.0 的内存泄漏

c++ - STABLE_PARTITION 问题 : no matching function to call to "swap"

c++ - 通过最多 2 个不同的位置查找字符串邻居

c - Boolean 是 C 中的内置枚举吗?

c++ - 在 Eigen 中计算 SparseMatrix 1-范数、Inf-范数的有效方法

c++ - IEEE754 float 在多大程度上满足 LessThanComparable?

vb.net - 如何在窗口窗体应用程序中创建颜色枚举?

c++ - 尝试从列表中删除元素时出现 "List iterators incompatible"

c++ - iterator::operator* 的标准接口(interface)返回的内容多于 T& 和 std::pair