
AMDG On 04/06/2011 02:52 PM, Jake Brownson wrote:
If you have a compiler that support C++0x features, <something> can be auto.
Yeah I was thinking the same thing, I don't think I should stray into 0x land w/ this stuff yet.
I thought about using a copy, and not to get too picky but it'd be so much slicker if I could just instantiate the vector inline. If I could write down the type I could at least create a helper that does the begin/end calls. I figure at least the way I was trying to do it was 2 lines instead of 3, and didn't have a non-const var lying around.
Well, how about this version: tested with msvc 10.0 and gcc 4.5.1 #include <boost/range/adaptor/transformed.hpp> #include <boost/range/any_range.hpp> #include <boost/spirit/include/phoenix_core.hpp> #include <boost/spirit/include/phoenix_bind.hpp> #include <vector> class A {}; class B { public: A a; }; class C { public: static B BFromA(const A& a) { return B(); } }; template<class T, class Range> T construct(const Range& r) { return T(boost::begin(r), boost::end(r)); } std::vector<B> CsFromBs(std::vector<B> bs) { return construct<std::vector<B> >(bs | boost::adaptors::transformed(boost::phoenix::bind(&C::BFromA, boost::phoenix::bind(&B::a, boost::phoenix::arg_names::arg1)))); }
The following works for me with VC++ 2010:
I'm getting the same build errors with what you provided... I guess my compiler has issues with this.
Maybe. I'm using the most recent development trunk.
I'm using XCode 4 w/ GCC 4.2 and boost 1.46.1. I get the same errors when I try LLVM 2.0. I thought I was doing it about right :(.
What version of phoenix are you using? It's obviously not from 1.46.1, since the first official release of Phoenix 3 will be in 1.47. In Christ, Steven Watanabe