まだリリースされていないですが、Boost 1.47.0のリリースノートにこんなのがあったのでBoostの最新ソースで試してみました:
boost::functionに、関数の参照を持たせるためにboost::refでラップして渡すとコンパイルエラーになる問題を修正(#4325)。
#include <iostream> #include <boost/function.hpp> #include <boost/ref.hpp> struct functor { int value; functor() : value(0) {} void operator()() { ++value; } }; int main() { functor func; boost::function<void()> f = boost::ref(func); for (int i = 0; i < 10; ++i) { f(); } std::cout << func.value << std::endl; }
10
できました!
しかし今のところ使い道は思いつきません。