Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.217.228.35] |
|
Сообщ.
#1
,
|
|
|
Среда VS 2019 - стандарт языка С++ 17
Есть функция которая устанавливает слушатель функцию которая будет вызываться после получения данных. data.AddListener(здесь нужно передать её коллбэк функцию) в описании к ней сказано: AddListener(std::function<...> callback) Starts listening to the events referenced by this query. Пробую сделать так: data.AddListener( [](const int& nData) { TRACE("DATA GET"); }); Выходит ошибка: Ошибка C2664 "AddListener(std::function<void (const int nData&,)>)": невозможно преобразовать аргумент 2 из "CBaseDlg::OnBnClickedButton2::<lambda_9d0c56e373295f07cbd348335aa377ff>" в "std::function<void (int nData&)>" Base C:\Base\BaseDlg.cpp 92 Что то про лямбду пишет. Не пойму как передать коллбэк функцию через std::function? |
Сообщ.
#2
,
|
|
|
Судя по ошибке, ты AddListener принимает тип std::function<void (int &)>, а лямбда преобразуется к типу std::function<void (const int &)>. Добавь const в AddListener или убери его из лямбды. А то и вообще сделай std::function<void(int)>. Смысла в передаче по ссылке int-ов нет никакого.
|
Сообщ.
#3
,
|
|
|
const убрал, ничего не изменилось:
невозможно преобразовать аргумент 1 из <lambda_9d0c56e373295f07cbd348335aa377ff>" в "std::function<void (int nData&)> Мне кажется, я как-то не так синтаксис использую. Не пойму как использовать эту конструкцию - []. Менять AddListener нельзя, он в SDK библиотеки приходит. А int - я для упрощения написал. |
Сообщ.
#4
,
|
|
|
Что-то ты не договариваешь по-моему.
Ну попробуй сперва присвоить лямбду в переменную нужного типа, а потом уже передать: std::function<void (int &)> func = [](int& nData) { TRACE("DATA GET"); }; data.AddListener(func); |
Сообщ.
#5
,
|
|
|
std::function<void (int &)> func = [](int& nData) { TRACE("DATA GET"); }; data.AddListener(func); Супер! Спасибо! Так заработало! |
Сообщ.
#6
,
|
|
|
Цитата OpenGL @ Однозначно. Наверняка AddListener перегружен, бо в первом случае явно просится второй параметр, которого нет. Что-то ты не договариваешь по-моему. |