Russian Qt Forum

Программирование => С/C++ => Тема начата: OKTA от Февраль 06, 2015, 12:45



Название: [РЕШЕНО] Нужен совет по коллбэку
Отправлено: OKTA от Февраль 06, 2015, 12:45
Товарищи, приветствую!
Появилась задачка некоторая - не могу никак придумать решение.
Есть главный класс с виртуальной функцией. Эта функция, грубо говоря, передается параметром в конструктор другого класс, созданного в главном.
Проблема при компиляции в том, что главный класс передает QString (MainClass::*)(), а второй класс ждет QString(*)().
Посоветуйте, пожалуйста, что можно придумать.


Название: Re: Нужен совет по коллбэку
Отправлено: Пантер от Февраль 06, 2015, 12:47
c++11 доступен? Юзай std::function.


Название: Re: Нужен совет по коллбэку
Отправлено: OKTA от Февраль 06, 2015, 13:13
Спасибо, Пантер! Уже тоже нашел std::function, но получается тоже самое - нужна привязка к объекту. Что, в принципе, чертовски логично.
Придется переделать)


Название: Re: Нужен совет по коллбэку
Отправлено: Пантер от Февраль 06, 2015, 13:14
std::bind
Код
C++ (Qt)
m_dfsOperationObserver = (new Helper::DfsSendOperationObserver(std::bind(&DfsFilesSender::onFileSent, this, _1, _2)))
 


Название: Re: Нужен совет по коллбэку
Отправлено: OKTA от Февраль 06, 2015, 14:06
Еще раз спасибо, Пантер!
Получилось  :D

Передаю в конструктор
Код
C++ (Qt)
std::bind(&MainClass::func, this)
Во внутреннем классе ловлю, прописав в том же конструкторе
Код
C++ (Qt)
std::function<QString()> func


Название: Re: [РЕШЕНО] Нужен совет по коллбэку
Отправлено: Пантер от Февраль 06, 2015, 14:23
С c++11 жить стало проще. Единственный совет, ты тайпдефь такие коллбэки - красивше выглядит.
Код
C++ (Qt)
using DoneCallback=std::function<void(CAPRESULT result)>;
 


Название: Re: [РЕШЕНО] Нужен совет по коллбэку
Отправлено: OKTA от Февраль 06, 2015, 14:53
Тайпдэфю  ;) Это я так, для наглядности)


Название: Re: [РЕШЕНО] Нужен совет по коллбэку
Отправлено: Akon от Февраль 09, 2015, 01:16
А адаптер mem_fn тут никак не катит?