我正在设计一个 C++ 接口(interface),允许用户迭代从文件解码的对象。这个解码过程有点慢。
我正在考虑为此使用迭代器接口(interface),但我想避免任何不必要的复制,所以我正在考虑(用户方面):
for (const auto& object : file) {
// you can access the members of `object` here
std::cout << object.whatever() << std::endl;
// you can copy `object` here
myObjectCopy = object;
// you CANNOT do this because `object` changes
// as soon as the iterator advances
myObjectPtr = &object;
}
前面使用示例中的 object
是对迭代器实例内部对象的引用。
这是错的吗?您会在这里建议哪些其他惯用界面?
我想到了一个流接口(interface)(想想 std::istream
),但是据我所知,读取数据的方法也返回拷贝(它们提取字符)。
最佳答案
听起来你说的是 an input iterator .
请务必从 std::iterator<std::input_iterator_tag, decoded_object_type>
继承您的自定义迭代器类.一个经典的实现是 operator*
缓存解码后的对象,如果在 operator++
之前第二次调用它,则返回缓存的对象被调用;和 operator++
调用 operator*
以确保对象已被解码(如果尚未解码)。
关于c++ - 在 C++ 中,是否可以实现推进使 "current"元素无效的迭代器接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40426081/