Когда const Служебный класс , используемый в std :: function , приводит к ошибке компиляции.
Если удалить const , осложнение прошло успешно.
Поток кода : Вызывается Client :: GetValue (), который вызывает Server :: datalist ()
ВОПРОС: Почему я не могу использовать const на Сервисный класс ?
СТОРОНА СЕРВЕРА
// 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));