|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
13.08.2017, 16:36 | #1 |
Сама себе режиссер
Старожил
Регистрация: 27.04.2007
Сообщений: 3,365
|
Передача функции-члена класса В коллбеком в класс А
Всем привет. Спецы С++, помогите, плиз, совсем запуталась.
Есть функция (А::boo), в нее нужно передать другую функцию, определенную тайпдефом ( typedef void(*my_func)(void*) ). В классе B есть функция foo ( void foo(void * param) ), которую я и пытаюсь передать параметром, но у меня не получается (ошибки выделены в коде). Гугл в примерах использования подобной конструкции выдает практически такой же код. Подскажите, что я делаю не так? В классе А ничего менять нельзя, если что. Код:
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
|
13.08.2017, 17:00 | #2 |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
Указатель на функцию-член - это не указатель.
Какая конечная цель? |
13.08.2017, 17:46 | #3 | |
Сама себе режиссер
Старожил
Регистрация: 27.04.2007
Сообщений: 3,365
|
Конечная цель "чтоб работало" не катит?
Мне в функцию boo надо передать коллбек из моего основного класса. Разумеется, в вышеописанном коде я упростила реализацию функции boo. На самом деле она производит какие-то действия, а в конце выполняет переданную в параметр функцию. Цитата:
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
|
|
13.08.2017, 18:11 | #4 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
вот это:
Код:
это - функция член класса. 1. сам по себе тип "функции-члена" отличается от типа "функция" Код:
об имени класса, членом которого она является. 2. что бы выполнить запуск функции-члена по указателю на функцию-член, необходим объект для которого функция-член будет запущена. мы не сможем выполнить действие "открыть дверь автомобиля", если не укажем для какого именно автомобиля нужно открыть дверь. "откройте мне дверь, но я вам не скажу от какого автомобиля" - звучит как бред. 3. если класс A нельзя модифицировать, тогда то, что вы пытаетесь совершить - более чем странно и не логично. а само решение невозможно. поскольку противоречит здравому смыслу. 4. если бы класс А можно было модифицировать, тогда ваше желание можно было бы легко удовлетворить: http://rextester.com/QCRXC10291 Код:
|
13.08.2017, 18:27 | #5 | |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
Цитата:
Код:
|
|
13.08.2017, 19:46 | #6 |
Сама себе режиссер
Старожил
Регистрация: 27.04.2007
Сообщений: 3,365
|
_Bers, спасибо большое за информацию. Не думала, что в С++ так все может быть сложно с этим. Потому как в AS3 можно без проблем передать любую функцию в любой класс.
Что касается класса А, то переделать я его действительно не могу, потому что он не мой, а движка. И документации/примеров использования у меня нет, поэтому я посчитала, что все должно быть просто. Трудности перевода, так сказать... И не использовать тот класс я тоже не могу, так как если писать похожий свой, то достаточно много писанины. Поэтому я выкрутилась. Не могу сказать, что горжусь этим, но лучше, чем ничего. Код:
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
Последний раз редактировалось ACE Valery; 13.08.2017 в 19:49. |
13.08.2017, 21:36 | #7 | ||
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
и функции, и функции члены. просто в вашем случае, ваш класс хочет принимать только обычные функции. и вы сами пишите: изменять его нельзя. ну так... Цитата:
очень распространен в мире языка си функция получает void* param то бишь, передать можно все что угодно. однако, в вашем варианте: Код:
в то время, как в изначальном варианте: Код:
и вы сами писали, что этот класс менять нельзя. |
||
13.08.2017, 23:37 | #8 |
Сама себе режиссер
Старожил
Регистрация: 27.04.2007
Сообщений: 3,365
|
Моя вина, признаЮсь. Я слишком сильно упростила класс А для форума. Там изначально принимался параметр. Просто я думала, что дело именно в моем синтаксисе, и оставила только те вещи, которые, мне казалось, важны для понимания проблемы.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
|
14.08.2017, 06:06 | #9 |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
|
14.08.2017, 07:33 | #10 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
Прочитайте про std::function и std::bind.
Так же поищите инфу по сочетанию "delegate C++" Ну а если уж так строго и нельзя менять А тогда придется в куче выделять структуру, в которой будет std::function и передавать как параметр для вызова колбэка. Последний раз редактировалось waleri; 14.08.2017 в 07:38. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Передача метода одного класса как параметр функции другого | KemanSR | Общие вопросы C/C++ | 4 | 22.07.2015 21:20 |
Передача члена класса в другой класс | Cerg1580 | Общие вопросы C/C++ | 0 | 20.12.2014 13:13 |
передача функции в конструктор класса | Kukurudza | Общие вопросы C/C++ | 6 | 04.12.2011 08:31 |
передача типов из класса в класс | badmfck | Общие вопросы Delphi | 10 | 24.05.2010 12:31 |
Передача ссылки в функцию класса на данный класс | Impuls1989 | Общие вопросы C/C++ | 17 | 09.01.2010 17:21 |