Boost.Phoenix で、const でない関数オブジェクトを bind する
そのまま渡したらエラーになりました。
phx::ref でラップする必要があるみたいです。
[ソース]
#include <boost/phoenix.hpp> #include <iostream> struct disp{ disp() : count(1){} void operator ()(){ for(int i = 0 ; i < count ; ++i){ std::cout << "homu"; } std::cout << "\n"; ++count; } private: int count; }; int main(){ namespace phx = boost::phoenix; using phx::arg_names::arg1; disp d; // phx::bind(d)(); // error phx::bind(phx::ref(d))(); phx::bind(phx::ref(d))(); phx::bind(phx::ref(d))(); phx::bind(phx::ref(d))(); return 0; }
[出力]
homu homuhomu homuhomuhomu homuhomuhomuhomu
言われてみれば当たり前の様な気がしますが、ハマったので覚え書き。
[boost]
- ver 1.47.0