I would like to use either a native pointer to a class method, or an implementation of std::function , but without using lambda, i.e. write a callback in a different way:

 class window : public window_base { private: std::function<void(renderer::*)()> m_display_callback_; ... void window::set_render_callback(renderer* rndr) { m_display_callback_ = [=]()->void{ rndr->clear(); rndr->display(); }; } } 

Is it possible to avoid this kind, i.e. get rid of lambda?

  • Understood nothing. What is std::function<void(renderer::*)()> in general std::function<void(renderer::*)()> and why? - AnT

2 answers 2

I do not understand ... If a static or free function, then no problem:

 void f(){} std::function<void()> m_display_callback_; m_display_callback_ = аж 

And if a member is a class, then we must take into account that a hidden parameter is passed to it - a reference to an object of a class, so that it cannot be void(void) ;

  • Ay, not correctly rewrote, void(renderer::*)() . - LLENN 8:36 pm
 static void f(renderer* rndr) { rndr->clear(); rndr->display(); } void set_render_callback(renderer* rndr) { //m_display_callback_ = [=]()->void{ rndr->clear(); rndr->display(); }; m_display_callback_ = std::bind(f, rndr); }