Те выглядят хорошо для меня. Или я не могу комментировать более точно, не зная, что именно вы делаете. Но одна вещь, которую вы можете наверняка сделать в любом случае: почему бы вам не использовать 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!