Несколько философский вопрос, но все же.
В С++ указатель на функцию-член "отвязан" от объекта. Поэтому:
1. В момент использования такого указателя надо знать тип объекта, а не только сигнатуру функции
2. Указатели на функции-члены разных классов имеют разный размер
Вопрос собственно в том, почеиу разработчики языка пошли по такому пути, а не "слили" в одно целое указатель на член и указатель на объект (типа того, как это сделано в дельфи\C#)?
Ведь тогда указатель на функцию-член физически просто состоял бы из указателя на объект + простого указателя на функцию. И тип такого указателя зависел бы только от сигнатуры функции, а не сигнатуры ф-ции и типа объекта.
Для компилятора (имхо) такое "слияние" сделать тривиально. Выбрать, на какой конкретно экземпляр виртуальной функции указывать, можно уже при инициализации такого указателя.
А программисту(автору библиотеки) чтобы сделать это, надо извращаться через базовый абстрактный класс + наследующие от него шаблоны + размещение такого объекта в динамической памяти (как собственно это сделано в буст\локи).
Я понимаю, что это разделение потенциально дает больше возможностей. Но ведь обычно указатели на функции используются для чего-то типа обратного вызова. Мне ни разу не приходилось
использовать указатели на члены, что бы вызывать один и тотже метод у разных объектов...
Кстати, для членов-данных можно просто получить адрес памяти (обычный указатель), а можно использовать указатель на член. А для членов-функций первого механизма почему-то не предусмотрели...
Кто что думает по этому поводу? Возможно, у авторов языка были какие-то резоны так сделать и где-то про это написано?
... << RSDN@Home 1.2.0 alpha 4 rev. 1096>>