std::bind для функции класса с параметром

152
23 декабря 2019, 16:30

Есть некоторая стандартная системная функция (в примере Job_test), вызывающая callback функцию с параметром. Саму callback функцию я хочу расположить в составе класса, и потом использовать std::bind для ее вызова с аргументом this

В примере ниже do_job2 компилируется нормально, а на do_job1 возникает ошибка компиляции:

no suitable user-defined conversion from "std::_Bind (ca *)>" to "ArCallBackFunction1" exists

Отличие заключается в том, что do_job1 вызывает callback с одним параметром, а do_job2 вызывает callback без параметра.

Подскажите пожалуйста как правильно написать пример с do_job1 ?

typedef std::function<void(int a)> ArCallBackFunction1;
typedef std::function<void()> ArCallBackFunction2;
void Job_test1( ArCallBackFunction1 onRequest) {  onRequest(2); };
void Job_test2( ArCallBackFunction2 onRequest) {  onRequest(); };

class ca {
  public:
  void callBack1(int a) { Serial.println("a"); };
  void callBack2() { Serial.println("a"); };
  void do_job1() {
    Job_test1( std::bind(&ca::callBack1,this));
  }
  void do_job2() {
    Job_test2( std::bind(&ca::callBack2,this));
  }
};
Answer 1
#include <iostream>
#include <functional>
typedef std::function<void(int a)> ArCallBackFunction1;
typedef std::function<void()> ArCallBackFunction2;
void Job_test1( ArCallBackFunction1 onRequest) {  onRequest(2); };
void Job_test2( ArCallBackFunction2 onRequest) {  onRequest(); };
class ca {
  public:
  void callBack1(int a) { std::cout<<"callBack1:"<<a<<'\n'; };
  void callBack2() { std::cout<<"callBack2"<<'\n'; };
  void do_job1() {
    Job_test1( std::bind(&ca::callBack1, this, std::placeholders::_1));
  }
  void do_job2() {
    Job_test2( std::bind(&ca::callBack2,this));
  }
};
int main() {
ca c;
c.do_job2();
c.do_job1();
return  0;
}

std::placeholders

READ ALSO
Получение None в качестве аргумента в boost.python

Получение None в качестве аргумента в boost.python

Пытаюсь экспортировать из С++ в Python перегруженную функцию, которая должна принимать, в том числе, NoneНепонятно какой тип данных следует использовать...

148
Как определить путь к текстуре модели в Arcgis?

Как определить путь к текстуре модели в Arcgis?

Можно менять текстуру у добавленной модели в Arcgis ? У меня добавляется модель на сцену так :

151
Передача id от одной таблицы к другой. Hibernate

Передача id от одной таблицы к другой. Hibernate

У меня есть две таблицы: customers и phoneNumbers У одного customer может быть 1+ phoneNumbers

156
Как правильно настроить роутинг в Spring Cloud Gateway

Как правильно настроить роутинг в Spring Cloud Gateway

Пытаюсь настроить роутинг в Gateway в properties прописываю адрес и куда перенаправлять, не могу понять логику работы

138