LINUX.ORG.RU

[C++] Как сделать много Callback'ов?

 


0

2

Вот есть чужая функция, которая берёт коллбэк в качестве параметра. У меня же есть целый массив объектов, для которых можно получать эти функции.. но коллбэк только один!

Пример:

void myCB(void *); // ОДИН коллбэк

A * arr = new A[41]; // МНОГО объектов
arr[12]->func(myCB);
Есть ли способ в C++ динамически создавать функции-коллбэки?


Если тебя надо лямбда, то такого нет пока (но будет). С другой стороны ты можешь передавать объект, в котором будет какое-то состояние. А объекты ты можешь создавать в динамике. Вопрос насколько только различаться будет реализация callback. Если существенно, то через наследование, если только парой параметров, то через параметр конструктору объекта.

olegk ★★
()
Ответ на: комментарий от olegk

> Если тебя надо лямбда, то такого нет пока

официально нет, неофициально практически во всех компиляторах есть

aho
()

Boost::Function?

Deleted
()
Ответ на: комментарий от olegk

Спасибо за ответ :)

С другой стороны ты можешь передавать объект, в котором будет какое-то состояние.

К сожалению я никак не могу модифицировать функцию, принимающую коллбэк (она находится в отдельной библиотеке от которой у меня даже нет исходников).

mors
() автор топика

я не совсем понял, что именно требуется, и пример нифига не иллюстрирует. Что мешает вызвать func для всех A из arr с переданным им myCB? Или поведение myCB должно разительно отличаться для каждого объекта?

yoghurt ★★★★★
()

Тоже не догнал, чего требуется достичь. Почему коллбек только один? Что в приведенном примере мешает сделать еще один? Что за «чужая функция» - это метот &A::func? Какая у него сигнатура? Что значит «динамически создавать». Короче, я вообще ничего не понял в вопросе.

ratatosk
()

Есть ли способ в C++ динамически создавать функции-коллбэки?

В С++ принято (предпологалось) использовать виртуальные методы и указатели на базовый класс для реализации подобной функциональности.

Absurd ★★★
()

Используй boost::function вместе с boost::bind, и будет тебе щасте.

one_more_hokum ★★★
()
Ответ на: комментарий от yoghurt

> Или поведение myCB должно разительно отличаться для каждого объекта?

Да, для каждого объекта коллбэк должен делать разные вещи.

mors
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.