Указатели на функции-члены; почему сделали именно так?
От: Непомнящий Евгений  
Дата: 02.09.08 07:47
Оценка:
Несколько философский вопрос, но все же.

В С++ указатель на функцию-член "отвязан" от объекта. Поэтому:
1. В момент использования такого указателя надо знать тип объекта, а не только сигнатуру функции
2. Указатели на функции-члены разных классов имеют разный размер

Вопрос собственно в том, почеиу разработчики языка пошли по такому пути, а не "слили" в одно целое указатель на член и указатель на объект (типа того, как это сделано в дельфи\C#)?

Ведь тогда указатель на функцию-член физически просто состоял бы из указателя на объект + простого указателя на функцию. И тип такого указателя зависел бы только от сигнатуры функции, а не сигнатуры ф-ции и типа объекта.
Для компилятора (имхо) такое "слияние" сделать тривиально. Выбрать, на какой конкретно экземпляр виртуальной функции указывать, можно уже при инициализации такого указателя.

А программисту(автору библиотеки) чтобы сделать это, надо извращаться через базовый абстрактный класс + наследующие от него шаблоны + размещение такого объекта в динамической памяти (как собственно это сделано в буст\локи).

Я понимаю, что это разделение потенциально дает больше возможностей. Но ведь обычно указатели на функции используются для чего-то типа обратного вызова. Мне ни разу не приходилось
использовать указатели на члены, что бы вызывать один и тотже метод у разных объектов...

Кстати, для членов-данных можно просто получить адрес памяти (обычный указатель), а можно использовать указатель на член. А для членов-функций первого механизма почему-то не предусмотрели...

Кто что думает по этому поводу? Возможно, у авторов языка были какие-то резоны так сделать и где-то про это написано?
... << RSDN@Home 1.2.0 alpha 4 rev. 1096>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.