
Am 10.10.2010 20:48, schrieb alfC:
On Oct 10, 3:17 am, Christopher Schmidt
wrote: Am 10.10.2010 12:02, schrieb alfC:
Hi,
(I keep struggling with Boos.Fusion.)
How do I deduce the type of the vector resulting from the transformation of another vector?
I have a source vector of different types, e.g. vector
si::length, quantitysi::mass, quantitysi::time and I have a transformation that is well defined and returns another type depending on the original type. The question is how do I generate a vector type that is the result of the given transformation. I though that result_of::transform was the function to obtain the result but it turns not because it returns a type transform_view instead of a vector.
vector< ... > v1; T? v2(transform(v1, transformation()));
i.e. what is the type of T as a fusion::vector as deduced from the type of v1 and the transformation type? -- Thank you, Alfredo--
You can generate a vector from an arbitrary fusion sequence using the conversion metafunction:
http://www.boost.org/doc/libs/1_44_0/libs/fusion/doc/html/fusion/cont...
fusion::result_of::as_vector< fusion::result_of::transform< v1, transformation >::type
::type v2(fusion::transform(v1, transformation()));
Hi, thank you. I tried something like this but I keep getting an error from the compiler.
/usr/include/boost/utility/result_of.hpp:68: error: invalid use of incomplete type ‘struct divide::result
what is the problem with the following transformation? that works well as a function but not as metafunction as called from result_of
struct divide{ template <typename SignatureT> struct result; template<class Q> struct result
{ typedef typename divide_typeof_helper si::time >::type type; }; template<typename Q> typename result::type operator()(Q const& q) const { return q/quantitysi::time(1.*si::second); } }; It works well as a function but not as a metafunction in the following typedef
typedef boost::fusion::result_of::as_vector< boost::fusion::result_of::transform< source_type, divide >::type >::type result_type ;
Try const-qualifying source_type in fusion::result_of::transform<...> or add a specialization for a non-const reference argument type in divide::result. (fusion::transform just accepts a reference to a const-qualified sequence whereas fusion::result_of::transform does not care about const-qualification at all and passes the template parameter types right down to the fusion::transform_view .) -Christopher