我的类(class)可以有 child ,所以我需要公开迭代器。渲染类需要反向迭代它们,这就是我有反向迭代器的原因。但是有没有办法减少这些,因为看起来很多:
std::vector<AguiWidget*>::iterator getChildBeginIterator();
std::vector<AguiWidget*>::reverse_iterator getChildRBeginIterator();
std::vector<AguiWidget*>::iterator getChildEndIterator();
std::vector<AguiWidget*>::reverse_iterator getChildREndIterator();
std::vector<AguiWidget*>::const_iterator getChildBeginIterator() const;
std::vector<AguiWidget*>::const_reverse_iterator getChildRBeginIterator() const;
std::vector<AguiWidget*>::const_iterator getChildEndIterator() const;
std::vector<AguiWidget*>::const_reverse_iterator getChildREndIterator() const;
std::vector<AguiWidget*>::iterator getPrivateChildBeginIterator();
std::vector<AguiWidget*>::reverse_iterator getPrivateChildRBeginIterator();
std::vector<AguiWidget*>::iterator getPrivateChildEndIterator();
std::vector<AguiWidget*>::reverse_iterator getPrivateChildREndIterator();
std::vector<AguiWidget*>::const_iterator getPrivateChildBeginIterator() const;
std::vector<AguiWidget*>::const_reverse_iterator getPrvateChildRBeginIterator() const;
std::vector<AguiWidget*>::const_iterator getPrivateChildEndIterator() const;
std::vector<AguiWidget*>::const_reverse_iterator getPrivateChildREndIterator() const;
谢谢
最佳答案
那些对我来说看起来不错。或者,如果不知道您到底在做什么,我就无法更准确地发表评论。但是你可以肯定做一件事:你为什么不使用typedef
?如果你使用 typedef
,你也可以在类之外使用它,也就是在客户端代码中,你会使用类!
例如,
class sample
{
public:
//make these typedef public so you use it from outside!
typedef std::vector<AguiWidget*>::iterator iterator ;
typedef std::vector<AguiWidget*>::reverse_iterator reverse_iterator;
typedef std::vector<AguiWidget*>::const_iterator const_iterator;
typedef std::vector<AguiWidget*>::const_reverse_iterator const_reverse_iterator;
iterator child_begin();
reverse_iterator child_rbegin();
iterator child_end();
reverse_iterator child_rend();
const_iterator child_begin() const;
const_reverse_iterator child_rbegin() const;
const_iterator child_end() const;
const_reverse_iterator child_rend() const;
};
//Usage
sample s;
sample::iterator it= s.child_begin();
//see this ^^^^^^^^ how we use the typedef here!
这看起来更好! typedef
基本上封装了实现,因为它可以帮助你隐藏类的实现细节;例如,您在类中使用什么容器,std::vector
、std::list
还是什么?再次查看上面的用法说明;光看就不能说是容器类型吧?
还请注意,我也更改了函数名称。我认为这很好。毕竟,STL 只使用 begin
和 end
而不是 beginIterator
和 endIterator
。但是,小写是我的口味,您可能仍然更喜欢大写以保持一致性!
在我看来,const
函数没有多大意义,如果你想公开只读迭代器,你可能会喜欢下面的一组函数!
const_iterator readonly_child_begin();
const_reverse_iterator readonly_child_rbegin();
const_iterator readonly_child_end();
const_reverse_iterator readonly_child_rend();
//Usage
sample s;
sample::const_iterator cit= s.readonly_child_begin();
//see this ^^^^^^^^ how we use the typedef here!
关于c++ - 我是否暴露了太多的迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5273716/