[function / bind] How to register callbacks using boost::function/bind?

Hi all, I am trying to use a callback mechanism for logging in my app. I thus have a class with : class coordinates_converter { public: coordinates_converter(int id); ~coordinates_converter(); void register_error_callback (const boost::function<void(std::string message)> &callback ) { _error_callback = callback; } private: boost::function<void(std::string message)> _error_callback; } Now, if I want to register a log error callback in another object instance, how should I do this? Cannot find the right syntax ... void another_class::do() { acute_coordinates_converter* converter = new coordinates_converter(2154); converter->register_error_callback( boost::bind(&another_class::log_error, converter, _1) ); } where log_error is a Qt SIGNAL: signals: void log_error(const std::string& error); Hope you could help. Rehads, Olivier

The problem is here: converter->register_error_callback( boost::bind(&another_class::log_error, converter, _1) ); The second parameter to bind should be an instance of the class whose member function you're trying to bind to: It should rather be converter->register_error_callback( boost::bind(&another_class::log_error, *another_class_instance*, _1) ); Under the hood, what will be happening is boost::function will call *another_class_instance->log_error(...)* * * If you think about it, you can't call converter->log_error, since coordinates_converter::log_error doesn't exist.

Great answer and explanations. Works like a charm :) 2013/2/4 Steve Lorimer <steve.lorimer@gmail.com>
The problem is here:
converter->register_error_callback( boost::bind(&another_class::log_error, converter, _1) );
The second parameter to bind should be an instance of the class whose member function you're trying to bind to:
It should rather be
converter->register_error_callback( boost::bind(&another_class::log_error, *another_class_instance*, _1) );
Under the hood, what will be happening is boost::function will call *another_class_instance->log_error(...)*
* *
If you think about it, you can't call converter->log_error, since coordinates_converter::log_error doesn't exist.
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
participants (2)
-
Olivier Tournaire
-
Steve Lorimer