Передача объекта класса const в std::function и std::bind, приводят к ошибке компиляции
Когда const Serviceclass, используемый в std::function, приводит к ошибке компиляции. Если удалить const, осложнение прошло успешно.
Поток кода : вызывается Client::GetValue(), который вызывает Server::datalist()
ВОПРОС: Почему я не могу использовать const на Serviceclass?
СТОРОНА СЕРВЕРА
// vvvvv (if const remove then compliation success.)
typedef std::function<void(int, Status, const Serviceclass&)>
Callback;
//SECOND INVOKED
void Server::datalist(int Id, sessionId,Callback callback) {
std::unique_ptr<Serviceclass> ServiceObj = Serviceclass::create();
callback(request_id, RESULT,*ServiceObj.get());
}
typedef std::vector<std::string> dataList;
typedef std::function<void(int, Status, const dataList&)>callback_data;
//FOURTH INVOKED
void Server::getdata(int Id,callback_data){
// callback called with datalist
}
СТОРОНА КЛИЕНТА
//FIFTH INVOKE
void Client::Foo(int Id,Status,const dataList& data){
//impl
}
//THIRD INVOKED
void Client::Boo(int Id,
Status,
const Serviceclass& Serviceclass){
// ^^^^^ (if const remove then compliation success.)
Serviceclass.getdata(123,
std::bind(&Client::Foo, this, std::placeholders::_1,
std::placeholders::_2, std::placeholders::_3));
}
//FIRST INVOKED
void Client::GetValue() {
int Id = 123;
serverobj->datalist(
Id, sessionId,
std::bind(&Client::Boo, this, std::placeholders::_1,
std::placeholders::_2, std::placeholders::_3));
}
ОШИБКА
In member function 'void Client::Boo(int, Status, const Serviceclass&)':
mycode.cc:68:76: error: passing 'const Serviceclass&' as 'this' argument discards qualifiers [-fpermissive]
std::placeholders::_2, std::placeholders::_3));
1 ответ
Решение
Либо сделайте функцию-член const, либо сделайте неконстантный объект из Serviceclass.
// ^^^^^ add const
void Server::getdata(int Id,callback_data)const {
// callback called with datalist
}