2017-02-15 4 views
0

J'ai une classe dont la fonction de membre que j'essaie de pointer, problème est que je continue d'obtenir cette erreur reference to non-static member function must be called qui à mon sens est qu'une fonction de membre doit être souligné. Le problème est, lorsque je tente d'utiliser la solution this, le compilateur se plaint parce que there is no viable conversion from 'void (Foo::*) (const List&) to std::function<void (const List &)>Functor -> référence à la fonction de membre non statique doit être appelée

Ceci est mon Foo classe:

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; 
} 

Répondre

4

vous pouvez le faire comme ceci:

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

ou:

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

merci! fonctionne comme un charme. J'ai utilisé la première option. Pouvez-vous m'expliquer s'il vous plaît? –

+0

vous pouvez voir ceci: [link] (http://fr.cppreference.com/w/cpp/utility/functional/bind) –