mpd

Меня Джонатан не любит... :-(

Jan 15, 2010 14:00

Некий Jonathan Wakely определенно меня не любит.
А началось всё с моего письма в рассылке GCC (см. здесь предысторию возникновения этого письма), в котором я поинтересовался, а отчего же такая асимметрия:
  1. swap для пользовательских типов можно определять и в std, и в том же пространстве имён, откуда они;
  2. distance с advance - только в std, если вы ( Read more... )

freesoftware, c++, gcc

Leave a comment

Re: я бы добавил его distance в std:: и не парился бы. mpd January 31 2010, 11:16:04 UTC
Собственно, я так и поступил, когда реализовывал "своё дерево", реализовал свой итератор и свой distance с advance:
namespace A {

template
class TChSetIterator : public std::iterator<
std::bidirectional_iterator_tag,
typename std::iterator_traits::value_type::node_type,
std::ptrdiff_t,
const typename std::iterator_traits::value_type::node_type *,
const typename std::iterator_traits::value_type::node_type &>
{
.......
typedef std::iterator<
std::bidirectional_iterator_tag,
node_type,
std::ptrdiff_t,
const node_type *,
const node_type &> parent_type;
typedef TChSetIterator Self;
.......
public:

typename parent_type::difference_type distance(const Self & other) const;

void advance(typename parent_type::difference_type n);

Self & operator++()
{
advance(1);
return *this;
}
.......
};

} // namespace A

namespace std {

template
inline typename A::TChSetIterator::difference_type
distance(const A::TChSetIterator & first,
const A::TChSetIterator & last)
{
return first.distance(last);
}

template
inline void advance(A::TChSetIterator& i,
typename A::TChSetIterator::difference_type n)
{
return i.advance(n);
}

} // namespace std

По поводу его правоты - я уже высказался.

По поводу правильности расширения std я высказался тут (с учётом того, что для некоторых пользовательских типов всё же возможно и нужно определить то, что вами названо "быстрее чем Forward итератор и медленее чем RNA"): http://mpd.livejournal.com/33738.html?thread=147402#t147402

Reply


Leave a comment

Up