关于P-Stade.Oven P-Stade.Oven是一个Boost.Range的扩展库,同时也是 Range Library Proposal提案的一个具体实现。借助于这个类库,我们就能在Range上实施STL算法,从而获得更为简洁清晰的代码。 示例代码 #include<iostream> #include<vector> #include <pstade/oven.hpp> #include <boost/lambda/lambda.hpp> #include <boost/spirit/include/karma.hpp> #include <boost/spirit/include/phoenix.hpp> #include <boost/assign.hpp> #include <boost/foreach.hpp> using namespace std; using namespace pstade::oven; using namespace boost::assign; namespace karma = boost::spirit::karma; namespace lambda = boost::lambda; namespace phoenix = boost::phoenix; double g(int i){return i + 1.5;} int main() { vector<int> v; v += 1,2,3; auto v2 = v | transformed(lambda::_1 + 1.5); cout << karma::format(karma::auto_ % ',', v2) << endl; // error with gcc4.5 auto v3 = v | transformed(phoenix::arg_names::_1 + 1.5); BOOST_FOREACH(double i, v3) // error with gcc4.5 cout << i << ','; cout << endl; //auto v4 = v | transformed([](int elem){return elem + 1.5;}); // error function<double(int)> f = [](int elem){return elem + 1.5;}; auto v4 = v | transformed(f); PSTADE_OVEN_FOREACH(i, v4) // error with gcc4.5 cout << i << ','; cout << endl; auto v5 = v | transformed(g); for(auto i = v5.begin(); i != v5.end(); ++i) // error with gcc4.5 cout << *i << ','; cout << endl; return 0; } //2.5,3.5,4.5 //2.5,3.5,4.5, //2.5,3.5,4.5, //2.5,3.5,4.5,