使うかどうかまだわかりませんが、昨日のfusedの対となるunfusedです。
Fusionのシーケンスで引数指定する関数オブジェクトを、
通常の方法で引数指定する関数オブジェクトへとアダプトします。
#include <functional> #include <boost/assert.hpp> #include <boost/fusion/include/make_vector.hpp> #include <boost/fusion/include/fused.hpp> #include <boost/fusion/functional/adapter/unfused.hpp> namespace fusion = boost::fusion; int main() { typedef fusion::fused<std::plus<int> > func_type; func_type f; // BOOST_ASSERT(f(1, 2) == 3); // エラー int x = 1, y = 2; BOOST_ASSERT(fusion::unfused<func_type>()(x, y) == 3); // OK }
make_unfused()ヘルパ関数
#include <functional> #include <boost/assert.hpp> #include <boost/fusion/include/make_vector.hpp> #include <boost/fusion/include/fused.hpp> #include <boost/fusion/functional/generation/make_unfused.hpp> namespace fusion = boost::fusion; int main() { typedef fusion::fused<std::plus<int> > func_type; func_type f; int x = 1, y = 2; BOOST_ASSERT(fusion::make_unfused(f)(x, y) == 3); }
それと、パラメータが参照になっているようで
fusion::make_unfused(f)(1, 2)
としたらエラーになりました。