#include <boost/bind.hpp>
#include <iostream>
using namespace std;
using boost::bind;
class A {
public:
void print(string &s) {
cout << s.c_str() << endl;
}
};
typedef void (*callback)();
class B {
public:
void set_callback(callback cb) {
m_cb = cb;
}
void do_callback() {
m_cb();
}
private:
callback m_cb;
};
void main() {
A a;
B b;
string s("message");
b.set_callback(bind(A::print, &a, s));
b.do_callback();
}
So what I’m trying to do is to have the print method of A stream “message” to cout when b’s callback is activated. I’m getting an unexpected number of arguments error from msvc10. I’m sure this is super noob basic and I’m sorry in advance.
replace
typedef void (*callback)();withtypedef boost::function<void()> callback;A bound function doesn’t produce an ordinary function, so you cannot just store it in a regular function pointer. However,
boost::functionis able to handle anything as long as it is callable with the correct signature, so that’s what you want. It will work with a function pointer, or a functor created with bind.After a few corrections to your code, I came up with this: