【发布时间】:2012-06-18 17:55:39
【问题描述】:
我正在设计一个枚举系统中所有正在运行的进程的输入迭代器类型。
这类似于我为枚举进程中的模块而设计的迭代器。模块迭代器在构造函数中接受一个“进程”对象,并且默认构造的迭代器被认为是离线迭代器。
例子:
hadesmem::ModuleIterator beg(process);
hadesmem::ModuleIterator end;
assert(beg != end);
但我不知道如何处理进程枚举,因为没有需要向迭代器提供“状态”或信息(一切都由迭代器使用 Windows API 在内部处理)。
例子:
// This is obviously a broken design, what is the best way to distinguish between the two?
hadesmem::ProcessIterator beg;
hadesmem::ProcessIterator end;
处理这种情况的惯用方法是什么?即,当不需要向迭代器构造函数提供任何内容时,您需要区分“新”迭代器和非终端迭代器的创建。
如果相关,我可以在这个库中使用 C++11,只要它受 VC11、GCC 4.7 和 ICC 12.1 支持。
谢谢。
编辑:
为了澄清,我知道无法以我上面发布的形式区分两者,所以我要问的是一个“设计”问题而不是其他任何问题......也许我是只是忽略了一些明显的东西(不会是第一次)。
【问题讨论】:
-
让默认构造元素成为“结束”迭代器,然后使用另一个构造函数来构造“开始”状态。然后写两个非成员函数:
begin_modules()和end_modules()。 -
@JamesMcNellis:我目前的解决方法是使用一个虚拟参数来表示“真正的”迭代器,这样会很好地工作。
标签: c++ windows iterator c++11