![]() |
|
|
![]()
|
|
| mzconcept |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 7.5.2008 Репутация: нет Всего: нет |
Как реализовать на Visual C++ указатель на функцию-член класса? (в C++ Builder это реализовано с помощью слова __closure)
|
|||
|
||||
| Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 12 Всего: 26 |
-------------------- ????? ??, ??????? ?????. |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 2 Всего: 154 |
или так:
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Это не эквивалентные вещи.
Если строго следовать вопросу, то как написал Andrey44: void (CSomeDlg::*Funck)() = &CSomeDlg::SomeFunck; Но поскольку автор упомянул closure, то понятно, что ему нужно нечто другое. Это не совсем указатель на функцию-член, а скорее делегат. При вызове функции по чистому указателю нужно будет указывать объект. А чтобы получить готовый вызов - нужно использовать boost, как показал Lazin, ибо в стандартном C++ таких возможностей пока нет. -------------------- ... |
|||
|
||||
| Rififi |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 2 Всего: 36 |
в tr1 есть
поддерживается в vs2008 with feature pack |
|||
|
||||
| mzconcept |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 7.5.2008 Репутация: нет Всего: нет |
Попробывал так:
жаль, что не работает... Потом попробывал второй вариант
Работает!!! Одно но, приходиться тянуть библиотеку в 50 метров... Может попробуем реализовать общими усилиями эту часть буста? |
||||
|
|||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Какую библиотеку? function вся реализована в хедерах. Да, текста там много, но "своими силами" получится не меньше, но хуже... ты бы в исходники заглянул, прежде чем заикаться о другой реализации...
-------------------- ... |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 2 Всего: 154 |
||||
|
||||
| mzconcept |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 7.5.2008 Репутация: нет Всего: нет |
Попытался обойти boost ... вот что получилось:
Конечно, недостатком является то, что необходимо описывать дополнительную статическую функцию наподобии static void stClick(...). Зато удобно расспространять исходники своей программы, отпадает необходимость в бусте... Может кто-нибудь даст совет по оптимизации данного кода? |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 2 Всего: 154 |
так и не понял в чем проблема, ты что, рассчитываешь написать программу не использовав ни одной библиотеки что-бы "удобно расспространять исходники своей программы"?
ps в твоем случае больше подойдет boost::signal, так как там сигналы автоматически отсоединяются от слотов, в случае удаления объекта который их предоставляет.. твой вариант небезопасен, так как ты там систему типов пытаешься обойти (void *Owner;) |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |