如果声明一个静态的成员函数,用起来不便,而且可能出现编译错误。偶然发现function和bind这两个函数模板,很容易实现函数指针的功能,他们是C++ TR1的一部分,我用的VS2010可以支持!
class A
{
public:
void set(function<void()> f) {
m_func = f;
}
void do() {
m_func();
}
private:
function<void()> m_func;
};
class B
{
public:
void doit() {}
}
A a;
a.set(bind(&B::doit, this, placeholders::_1));
a.do(); //调用B::doit()