使迭代器解引用对象
Make iterator dereference object
我有一个简单的容器类,如:
class SimpleContainer {
using iterator = std::vector<Contained*>::iterator;
std::vector<Contained*> items_; // Note that 'Contained' is polymorphic.
public:
iterator begin() { return items_.begin(); }
iterator end() { return items_.end(); }
};
简单。但是,当我在for
循环中使用它时,我必须手动取消对该项的引用,如:
SimpleContainer container;
for (auto item : container) {
cout << *item << endl; // Dereferencing here is ugly
}
是否有一种简单的方法使迭代器自动取消引用,或者我需要编写一个具有该行为的新迭代器?
如果可以使用boost,则仅为此目的创建indirect_iterator
。使用
using iterator = boost::indirect_iterator<std::vector<Contained*>::iterator>;
然后需要用
修改begin()
和end()
iterator begin() { return boost::make_indirect_iterator(items_.begin(); }
更多详细信息请访问http://www.boost.org/doc/libs/1_56_0/libs/iterator/doc/indirect_iterator.html
您确定需要在容器中存储指针吗?我会像这样实现你的代码:
std::vector<Contained> items_;
在这种情况下,您不需要取消引用item对象。
相关文章:
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 我们可以有一个 setter 成员函数作为从 const 对象引用的 const 吗?
- C++对象引用返回不同的值
- 对象引用中的字段以不同的方法返回不同的值
- 通过向构造函数其他对象引用页面来创建对象
- 为什么在对象引用恒定时允许更改为另一个类的指针的成员变量
- 如何在C++中读取 HDF5 对象引用
- C++ 未定义的对象引用
- 从函数返回 libconfig 类设置对象引用
- qt vsaddin错误对象引用未设置为对象的istanse
- 在这种情况下,为什么使用 *此必需的对象引用返回对象引用
- 基本C - 构造contaning对象引用,并将其作为方法参数传递
- C :将对象引用作为参数给出错误:呼叫class :: function()的匹配函数
- C++OOP基础知识-是否正确返回对象引用
- 使用对象引用(可能)在调用destructor后使用对象引用
- 创建返回对象引用的成员函数的最简单方法
- 如何在C++上使用对象引用删除对象
- JNI/Android NDK-维护全局对象引用
- 为什么有些类方法返回"*this"(self的对象引用)?
- 在C++中返回伪对象引用的规则