我写了一些代码并害怕它不会工作 - 所以我写了一个原型:
#include <boost/function.hpp>
#include <boost/bind.hpp>
#include <iostream>
class base {
private:
boost::function<void (int)> action;
protected:
virtual void onDataBaseReady(int i) { std::cout << i << std::endl; }
public:
void call() {
action(10);
}
base() {
action = boost::bind(&base::onDataBaseReady, this, _1);
}
};
class child : public base {
protected:
virtual void onDataBaseReady(int i) { std::cout << i+10 << std::endl; }
};
int main()
{
static child c;
c.call();
std::cin.get();
return 0;
}
编译和工作。(输出20
)。但为什么?我还在 VS2010 下进行了测试,想知道它是否可以跨平台工作(比如在 GCC 下编译)?
主要是action = boost::bind(&base::onDataBaseReady, this, _1);
吓到我-我们说&base::
...