Как зарегистрировать обратный лямбда-вызов с аргументом const?

#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 те вещи, которые я пропустил на самом деле, когда вводил код в этот поток стека … проблема не в них…