我的班级可以有孩子,所以我需要暴露迭代器.render类需要反向迭代它们,这就是我有反向迭代器的原因.但有没有办法减少这些因为它似乎很多:
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;
Run Code Online (Sandbox Code Playgroud)
谢谢
Naw*_*waz 13
那些对我来说很好看.或者,如果不知道你究竟在做什么,我就无法准确评论.但有一点可以肯定做到在任何速度:你为什么不使用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!
Run Code Online (Sandbox Code Playgroud)
这看起来更好!基本上typedef封装了实现,因为它可以帮助您隐藏类的实现细节; 例如,您使用的是全班容器std::vector,std::list或者什么?再次参见上面的用法说明; 只是通过看它你不能说容器类型,可以吗?
另请注意,我也更改了函数名称.我觉得这很好.毕竟,STL使用just 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!
Run Code Online (Sandbox Code Playgroud)