| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > передача указателя на функцию-член |
| Автор: Mormishka 26.3.2011, 09:16 | ||||
Как передать указатель на функцию-член одного класса другому?
Пишет
|
| Автор: alexvs11 26.3.2011, 10:43 | ||||
| несколько способов 1) стандартный способ использования указателей на функции-члены, ну тут в гугл http://www.gamedev.ru/code/faq/?id=3599 2) в стл
3) в новом стандарте использования std::function (аналогично в бусте)
Добавлено через 1 минуту и 18 секунд главное помнить, что указатель на функцию член зависит от двух вещей 1) смещение в классе, те &X::foo 2) адреса самого объекта |
| Автор: jonie 27.3.2011, 12:39 |
| bsa, однако чувак говорит не про подпрограмму, а про сам указатель. И да, он хитрее устроен, чем обычный указатель на функцию (подробнее: http://www.rsdn.ru/article/cpp/delegates.xml#E4GAE) и http://www.rsdn.ru/article/cpp/fastdelegate.xml) |
| Автор: alexvs11 27.3.2011, 15:36 | ||
ну да, ну да, ну да, а поля объекта как она получает? данные объекта функция-член получает через указатель this, который является адресом объекта |
| Автор: mes 27.3.2011, 16:32 | ||||||
_обладает_ ли f() в этих примерах разным смещением ? Добавлено через 2 минуты и 18 секунд
а указатель на функцию член тоже получает данные через this ? а то из высказываний не совсем понятно, что имеете ввиду... |
| Автор: alexvs11 27.3.2011, 16:51 | ||||||
не знаю как их можно сравнить, ибо приведение к int не работает и сравнение для разных классов тоже, но
дает false
скажем так, для доступа к функции-члену нужно смещение и адрес объекта, что в этом не есть очевидное? ну уж то что виртуальная функция зависит от адреса объекта то уж точно сомнений нет? Добавлено через 12 минут и 5 секунд вот собсно ответ на вопрос автора
|
| Автор: mes 27.3.2011, 17:19 | ||
1. смещение функции в чем ? 2. для доступа к функции-члену адрес объекта не нужен.. а для вызова функции члены только адреса объекта мало, нужен и тип.. 3. указатель на функцию и имя функции имеют разное поведение ( при вызове) |
| Автор: alexvs11 27.3.2011, 17:22 | ||
ну дак ответьте автору без адреса объекта |
| Автор: mes 27.3.2011, 17:24 | ||
от самого адреса объекта нет |
| Автор: alexvs11 27.3.2011, 17:26 |
| это умная демагогия про то чем отличается функция от ее вызова? |
| Автор: mes 27.3.2011, 17:27 |
я пытаюсь заострить Ваше внимание, на не совсем корректном восприятии функции.. по крайней мере такое впечатление сложилось после Ваших высказываний.. к посту тс мои замечания фактически не относятся.. |
| Автор: bsa 27.3.2011, 19:18 | ||
Почитал. Узнал много нового. Спасибо. Знал, что указатель на метод вещь убогая, но даже не представлял, что на столько. |
| Автор: alexvs11 27.3.2011, 19:40 | ||
поэтому радуемся std::function |
| Автор: mes 27.3.2011, 19:57 |
это не пройдет когда нам нужно сделать из метода с-делегат ( например void(*cb)(void *); ) |
| Автор: alexvs11 27.3.2011, 20:19 | ||||
нечто вроде этого, или чтото другое? |
| Автор: mes 27.3.2011, 20:34 | ||||
типо этого
1. передавать test`у std::function не получится 2. прямая конверсия метода (где fn нестатический член А) не безопасна какой вариант можете предложить ? т.е. для условно такого :
|