Во-первых, почему все ещё пользуются устаревшими std:: классами? Используешь shared_ptr из boost-а, а bind — не хочешь. Про lambda умолчу, т.к. хоть и удобная, да не все компилеры ещё доросли.
Во-вторых, создавать foo_ptr(this) — равноценно самоуничтожению.
А так... http://www.boost.org/libs/bind/bind.html#with_member_pointers
Здравствуйте, Анатолий Широков, Вы писали:
L>>Во-первых, почему все ещё пользуются устаревшими std:: классами? АШ>А кто их устарел?
Никто, просто не зря в буст были добавлены более удобные аналоги. Тем более, что со многими бустовыми классами стандартные уже работают.
АШ>
АШ>А может вы представите рабочий пример?
А этот разве не работает???
some_foo_ptr — это foo_ptr указывающий на this. Откуда его брать — это уже дело автора топика, т.к. тривиально эта проблема не решается, однако можно воспользоваться enable_shared_from_this. См. здесь и здесь
Здравствуйте, limax, Вы писали:
L>Здравствуйте, Анатолий Широков, Вы писали:
L>>>Во-первых, почему все ещё пользуются устаревшими std:: классами? АШ>>А кто их устарел? L>Никто, просто не зря в буст были добавлены более удобные аналоги. Тем более, что со многими бустовыми классами стандартные уже работают.
АШ>>
Здравствуйте, Анатолий Широков, Вы писали:
L>>А этот разве не работает???
АШ>Нет, и даже если изменить сигнатуру на void boo::f(foo *) и передавать вместо some_foo_ptr this. В чем была проблема я осветил в своем посте.
Работает оно, и с такой сигнатурой и с сякой.
Мне кажется ты немножко поторопился
Re[2]: Проблема с std::mem_fun
От:
Аноним
Дата:
03.08.03 15:27
Оценка:
Здравствуйте, limax,
Мне просто любопытно, а есть ли у boost::bind1st, boost::bind2nd и пр. преемущества перед boost::bind?
Здравствуйте, <Аноним>, Вы писали:
А>Здравствуйте, limax,
А>Мне просто любопытно, а есть ли у boost::bind1st, boost::bind2nd и пр. преемущества перед boost::bind?
Здраствуйте, Юнусов Булат. Вы писали:
L>>> А этот разве не работает??? ЮБ> АШ>> Нет, и даже если изменить сигнатуру на void boo::f(foo *) и передавать АШ>> вместо some_foo_ptr this. В чем была проблема я осветил в своем посте. ЮБ> ЮБ> Работает оно, и с такой сигнатурой и с сякой. Мне кажется ты немножко поторопился ЮБ>
У меня 7-й интел не компилирует. Как верно заметил Анатолий, из-за отсутствия преобразования bar_ptr в bar*
Буду писать функтор
Здравствуйте, PM, Вы писали:
PM>У меня 7-й интел не компилирует. Как верно заметил Анатолий, из-за отсутствия преобразования bar_ptr в bar* PM>Буду писать функтор
Странно, vc6.0 vc7.1 gcc3.3 съели нормально, неужели интел не разруливает?
Здравствуйте, Аноним, Вы писали: А>Мне просто любопытно, а есть ли у boost::bind1st, boost::bind2nd и пр. преемущества перед boost::bind?
Ы?
А где ты их вообще нашёл?
В 1.30.0 я их не нашёл, по крайней мере в документации. А если где-то и есть, то оставлены только для совместимости с левыми компиляторами и старыми версиями boost.
А если ты ошибся и имел в виду std::bind1st/bind2nd, то, при условии, что компилятор нормально понимает boost::bind:
в плане функциональности и удобства использования они на-амного проигрывают boost::bind;
в плане скорости и размера генерируемого кода они равны;
в плане стандарта... Хм, я думаю любой, кто интересуется такой функциональностью STL, как биндинг аргументов, имеет у себя установленный boost или хоть раз им пользовался. А если нет, то никогда не поздно это сделать.