From: Tobias Schwinger (tschwinger_at_[hidden])
Date: 2007-06-14 16:20:54
Eric Niebler wrote:
> Hartmut Kaiser wrote:
>> dan marsden wrote:
>>> I don't think we've got anything that supports this directly
>>> at the moment.
As long as we're talking about Fusion/functional - no we haven't.
>>> Is the sort of thing you are looking for?
>>> fused_ctor<T> fc;
>>> T t = fc(sequence);
>>> Where fused_ctor::operator()(Seq const&) breaks up the
>>> sequence into args for the T ctor.
> Yes, that's the thing.
OK, but why duplicate the unpacking of the Sequence?
All it takes is yet another adapter encapsulating a type's ctor(s) in a
function object to just use fusion::(invoke|fused)_function_object. E.g:
// untested code for illustration only
typedef T result_type;
// [...] tricky nullary case with default ctor detection
// omitted for simplicity
T operator(T0 & a0) const
template<typename T0, typename T1>
T operator(T0 & a0, T1 & a1) const
// Sequence elements are unpacked as lvalues, so const
// qualifiers on the argument types of operator() can be
Client code (at function scope):
invoke_function_object( ctor<my_class>(), argseq );
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk