#c #visual-studio #callback
Вопрос:
Я пытаюсь зарегистрировать метод с аргументом const, используя лямбду, в функцию std::в c , vs2017
пример кода того, что я попробовал, выглядит следующим образом
создал свой интерфейс, как показано ниже
class myInterface
{
public:
struct Data
{
std::string xyz;
};
struct myCallback
{
std::function<void(const Data*)> m_xStart;
}
}
класс обратного вызова
class MyCallBack
{
public:
~MyCallBack () {};
void xStart(const myInterface::Data*);
}
Файл CPP
void MyCallBack::xStart(const myInterface::Data*)
{
//do something
}
Я попробовал std::привязать
void run(){
MyCallBack myObject;
myInterface::myCallBack instanceMyCallback;
instanceMyCallback.m_xStart = std::bind(amp;MyCallBack::xStart, amp;myObject, _1); // register
//lambda
//instanceMyCallback.m_xStart = [amp;](const myInterface::Data* Data) { myObject.xStart(Data); };
}
Я также попытался зарегистрироваться в lambda, но смог заставить его работать
Error C2679 binary '=': no operator found which takes a right-hand operand of type run::<lambda_40402ad3d6aac639e3a7b4960fceb680>' (or there is no acceptable conversion)
Комментарии:
1. Работает, как и ожидалось, здесь (после исправления опечаток).
2. Обратите внимание , что вы храните указатель на локальную переменную в своем
std::function
, так чтоstd::function
его следует вызывать только в этой области.3. @Jarod42 какую опечатку ты исправил? я не вижу никаких изменений в коде
4. Пропал
;
без вести , дело заb
вmyCallback
,std::placeholders
и.#include
5. @Jarod42 те вещи, которые я пропустил на самом деле, когда вводил код в этот поток стека … проблема не в них…