C++ 3d.Комментарии


Адаптеры функций-членов


Сначала рассмотрим типичный случай, когда мы хотим вызвать функцию-член без аргументов...

Теперь немного про вызовы функций-членов для элементов контейнера с помощью механизма mem_fun(). Действительно, вариант for_each(lsp.begin(),lsp.end(),mem_fun(&Shape::draw)); // рисуем все фигуры

подкупает своим изяществом. И даже более того, предоставляемые mem_fun() возможности действительно могут быть востребованы, например, при реализации некоторого абстрактного шаблона разработки (design pattern). Но за красивым фасадом скрывается вызов функции через указатель на член -- операция отнюдь не дешевая и далеко не все компиляторы умеют встраивать вызов функции через такой указатель. Будем рисковать?

А что, если нам нужно повернуть все фигуры на заданный угол? bind2nd(), говорите? А если на разные углы да причем не все элементы контейнера, и эти углы рассчитываются по сложному алгоритму? По-моему, такой вариант в реальных программах встречается гораздо чаще.

Выходит, что и механизм mem_fun() не очень-то предназначен для серьезного использования. Изучить его, конечно, стоит, а вот использовать или нет -- решать вам.




Начало  Назад  Вперед