2017-02-15 2 views
0

У меня есть класс, чью функцию-член, на которую я пытаюсь указать, проблема в том, что я продолжаю получать эту ошибку reference to non-static member function must be called, которая, насколько я понимаю, состоит в том, что функция-член должна быть указал на. Проблема заключается в том, когда я пытаюсь использовать this решение, компилятор жалуется, потому что there is no viable conversion from 'void (Foo::*) (const List&) to std::function<void (const List &)>Functor -> ссылка на нестационарную функцию-член нужно называть

Это мой Foo класс:

class Foo { 
public: 
    int Run(int port); 
    void HandleRequest(HTTPServerRequest* request); 

private: 
    int num_ports; 
    void callback_method(const List&); 

}; //class Foo 

void Foo::HandleRequest(HTTPServerRequest* request){ 
std::function<void (const List&)> functor = callback_method; 
} 

ответ

4

вы можете сделать так:

void Foo::HandleRequest(HTTPServerRequest* request){ 
    std::function<void (const List&)> functor = 
     std::bind(&Foo::callback_method, this, std::placeholders::_1); 
} 

или:

void Foo::HandleRequest(HTTPServerRequest* request){ 
    std::function<void (const List&)> functor = 
     [this](const List& list){callback_method(list);}; 
} 
+0

спасибо! работает как шарм. Я использовал первый вариант. Не могли бы вы объяснить мне это? –

+0

вы можете увидеть это: [link] (http://en.cppreference.com/w/cpp/utility/functional/bind) –

Смежные вопросы