Передача объекта класса const в std :: function и std :: bind, приводят к ошибке компиляции - PullRequest
0 голосов
/ 18 ноября 2018

Когда 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));

1 Ответ

0 голосов
/ 19 ноября 2018

Либо сделайте функцию-член const, либо сделайте неконстантный объект класса Serviceclass.

//                                        ^^^^^ add const
void Server::getdata(int Id,callback_data)const {
        // callback called with datalist
       }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...