※このコードは現在作成中のライブラリを使用したものです。
OvenToBoost - github
#include <iostream> #include <vector> #include <string> #include <boost/assign/list_of.hpp> #include <boost/range/adaptor/regular_extension/transformed.hpp> #include <boost/range/algorithm/for_each.hpp> #include <boost/lambda/lambda.hpp> struct X { int a; std::string s; X(int a_, const std::string& s_) : a(a_), s(s_) {} }; struct disper { template <class T> void operator()(const T& x) const { std::cout << x << std::endl; } }; int main() { const std::vector<X> v = boost::assign::list_of (X(1, "a")) (X(2, "b")) (X(3, "c")) ; using boost::lambda::_1; boost::for_each(v |+ boost::adaptors::transformed(&_1 ->* &X::s), disper()); }
a b c
RangeをconstにするとC++03で動作しないので調査中。
#include <pstade/result_of_lambda.hpp>
を入れたら動作したのでBoost.Lambdaのresult_of対応がダメなのかもしれない。
それかindirect_functorのresult_typeの計算が間違ってる・・・。