Есть некоторая стандартная системная функция (в примере 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));
}
};
#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
Продвижение своими сайтами как стратегия роста и независимости