c++ - 是否可以创建一个 "external"迭代器类(即 : without access to the original data type)

标签 c++ iterator mfc

我正在开发一个项目,在该项目中为 MFC 类 CArray 创建迭代器类型非常有用。

由于 CArray 是 MFC 库的一部分,因此我无权访问该对象。

我还没有完全理解创建迭代器,但据我所知,人们通常会创建一个迭代器类型作为迭代器对应的类类型的成员。换句话说,需要访问类本身。

是否可以创建一个类“外部”的迭代器。即:CArray 类的外部。

最佳答案

CArray 是一个连续的容器。因此,一个简单的指针是该容器的随机访问迭代器:

template<class ...Ts>
auto begin(CArray<Ts...>& arr) noexcept { return &arr[0]; }

template<class ...T>
auto begin(CArray<Ts...> const& arr) noexcept { return &arr[0]; }

template<class ...T>
auto end(CArray<Ts...>& arr) noexcept { return begin(arr) + arr.GetSize(); }

template<class ...T>
auto end(CArray<Ts...> const& arr) noexcept { return begin(arr) + arr.GetSize(); }

关于c++ - 是否可以创建一个 "external"迭代器类(即 : without access to the original data type),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70308280/

相关文章:

c++ - 如何使用visual studio和MFC C++在windows上实现预览

c++ - 使用 GDI+ 与 HTML 页面

c++ - GLSL 链接错误

c++ - 在 vector 中移动项目的最有效方法是什么?

java - 如何在没有 ConcurrentModificationException 的情况下在 Java 中保留两个迭代器并删除它们之间的键

rust - 如何有条件地链接迭代器?

c++ - WINAPI C++获取当前的物理驱动器号

c++ - 如何正确中断 QThread 无限循环

java - 在 Java 中实现双向链表中的 Iterable

c++ - 线程退出时,dll 中的 mfc 无模式对话框被破坏