Russian Qt Forum
Ноябрь 22, 2024, 23:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Нужен совет по коллбэку  (Прочитано 4333 раз)
OKTA
Гость
« : Февраль 06, 2015, 12:45 »

Товарищи, приветствую!
Появилась задачка некоторая - не могу никак придумать решение.
Есть главный класс с виртуальной функцией. Эта функция, грубо говоря, передается параметром в конструктор другого класс, созданного в главном.
Проблема при компиляции в том, что главный класс передает QString (MainClass::*)(), а второй класс ждет QString(*)().
Посоветуйте, пожалуйста, что можно придумать.
« Последнее редактирование: Февраль 06, 2015, 14:07 от OKTA » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Февраль 06, 2015, 12:47 »

c++11 доступен? Юзай std::function.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
OKTA
Гость
« Ответ #2 : Февраль 06, 2015, 13:13 »

Спасибо, Пантер! Уже тоже нашел std::function, но получается тоже самое - нужна привязка к объекту. Что, в принципе, чертовски логично.
Придется переделать)
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Февраль 06, 2015, 13:14 »

std::bind
Код
C++ (Qt)
m_dfsOperationObserver = (new Helper::DfsSendOperationObserver(std::bind(&DfsFilesSender::onFileSent, this, _1, _2)))
 
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
OKTA
Гость
« Ответ #4 : Февраль 06, 2015, 14:06 »

Еще раз спасибо, Пантер!
Получилось  Веселый

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

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Февраль 06, 2015, 14:23 »

С c++11 жить стало проще. Единственный совет, ты тайпдефь такие коллбэки - красивше выглядит.
Код
C++ (Qt)
using DoneCallback=std::function<void(CAPRESULT result)>;
 
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
OKTA
Гость
« Ответ #6 : Февраль 06, 2015, 14:53 »

Тайпдэфю  Подмигивающий Это я так, для наглядности)
Записан
Akon
Гость
« Ответ #7 : Февраль 09, 2015, 01:16 »

А адаптер mem_fn тут никак не катит?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.287 секунд. Запросов: 22.