mpd

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

Jan 15, 2010 14:00

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

freesoftware, c++, gcc

Leave a comment

Comments 7

yosefk January 15 2010, 15:14:30 UTC
Была такая фраза про сюжет Гамлета, которая вполне подходит для эйдиэл и прочего нетривиального байндинга: "Тот, кто может все это запомнить, по праву смотрит на других несколько свысока".

Reply

Была такая фраза про сюжет Гамлета, которая вполне под mpd January 15 2010, 15:24:54 UTC
О, да! Эта фраза подходит к многим аспектам пюсов, не только к поиску имён...
Ведь я прочитал об этом в книжке-справочнике по шаблонам функций и классов, но описанный подход ни коем образом не связан с ними.

P.S.: А ещё из-за этой книги я долго тупил в последние дни над осознанием того, чего я не понимал: указатели на члены класса, которых нет и никогда не будет в самом классе.

Reply


(The comment has been removed)

Re: переопределение distance в std - это из какой серии? mpd January 15 2010, 16:55:13 UTC
Я указал свой старый пост в начале, который ссылается на другой пост, в котором мне некий аноним указал, что"Добавлять что-то в std не следует, на это есть Комитет по стандартизации. :-)"
Судя по всему, для этого анонимуса подходит твоё "просто некошерно".

Я решил проверить это утверждение на зуб, нашел много интересного по ходу ( что-то изложено в моём посте), и пришел к выводу, что когда припрёт, пАлюбому, расширять std надо, от этого никуда не денешься ( ... )

Reply

(The comment has been removed)

Шкурный вопрос. ;-) mpd January 15 2010, 17:06:07 UTC
Слушай, кстати, а через тебя можно будет привести одну книжицу?
Т.е., мне не к спеху, как соберёшься, даже можно уже почитанную, я не скуплюсь полностью оплатить полную её цену.
Как думаешь, а? :-)

Reply


ivansorokin January 30 2010, 21:35:03 UTC
> Но его утверждение, что "нет необходимости специализировать distance, или почти нет,
> потому, что STL может предоставить оптимальные реализации для всех возможных категорий
> итераторов" - вызвало у меня недоумение.

Он всё правильно говорит. distance определена для трех категорий итераторов: Forward, Bidirectional, Random Access. Для первых двух она реализована как последовательный инкремент, для последнего -- как разность двух итераторов. По идеи ты должен просто указать категорию итератора, а реализация STL сама выберет для неё distance.

Если бы я писал свой итератор, скажем, по дереву и для него можно было бы быстро реализовать distance, (быстрее чем Forward итератор и медленее чем RNA) я бы добавил его distance в std:: и не парился бы.

Reply

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 ( ... )

Reply


Leave a comment

Up