Указатели на функции-члены классов (комментарии)
Не понимаю, а зачем??? Я здесь увидел лишь альтернативный способ вызвать функцию, причем, способ нечитабельный) Может я что-то упустил из вида?
Иногда удобней пользоваться массивом из указателей на разные функции, чем катать простыни из switch или if.. else if
Я такую штуку применял:
1. чтобы избавится от толстого switch.
2. при динамической подмене функции в зависимости от железа.
ITcrusader
>Не понимаю, а зачем??? Я здесь увидел лишь альтернативный способ вызвать функцию, причем, способ нечитабельный) Может я что-то упустил из вида?
Я для консольных команд так делал.
В консольную команду можно биндить практически любой метод класса. Не затачивая его специально для этого. Так что это очень полезная штука.
Указатель на метод класса? Извращение же.
Если тебе нужен указатель на метод класса - ты пишешь неправильный код.
> Указатель на метод класса? Извращение же.
Возможно, ща начнется ....
> Если тебе нужен указатель на метод класса - ты пишешь неправильный код.
Это всего лишь один из инструментов при написании программы. Причем хороший инструмент.
Хороший прог видит такие вещи сразу.
asvp
> Причем хороший инструмент.
Это как раз плохой инструмент - он усложняет флоу и понимаемость программы
Вполне нормальная практика. Пользуюсь и довольно часто. У себя обвернуты указатели в шаблоны и фабричную функцию создания, дабы облегчить вызовы. Есть хорошая статья на эту тему: http://www.rsdn.ru/article/cpp/delegates.xml
Юзаю у себя в своём GUI для вызова какого-либо фанка при нажатии кнопки. Очень полезная вещь.
Неплохо было бы написать об подводных камнях этих указателей. Например, разный размер в зависимости от видов наследования. Или то, что приведение указателя на метод производного класса к указателю на базовый может быть сделано только через reinterpret_cast, что UB.
В C++ это ужасно нечитабильно, особенно если биндимая функция с параметрами. Лучше, при возможности, бустом биндить.
Smrdis
лучше по возможности не использовать буст, потому, что буст:
> это ужасно нечитабильно
:D
StiX
> лучше по возможности не использовать буст, потому, что буст:
А std::tr1::bind, пойдет?
asvp
> Хороший прог видит такие вещи сразу.
Ну, допустим я никудышный прог. Но за 6 лет использования C++ ни разу не довелось использовать данную возможность, о предоставлении которой языком я знал.
Мне не хотелось бы разводить холивар (если бы хотел, создал бы тему типа "C++ - не более чем извращенный способ прострелить себе ногу" или "apple рулит, Android - говно)" или "открывающая скобка в определениях функций должна быть в одной строке с заголовком функции" :) )
На тему целесообразности использования указателей на функции члены класса ответ я ищу, в том числе, самостоятельно. НО пока не нашел достойного примера применения. Если таков имеется, с удовольствием бы глянул:)
Тема в архиве.