|
Boost : |
From: Tobias Schwinger (tschwinger_at_[hidden])
Date: 2007-06-15 16:55:46
Peter Dimov wrote:
> Eric Niebler wrote:
>> Tobias Schwinger wrote:
>>> Tobias Schwinger wrote:
>>>
>>>> // [...] tricky nullary case with default ctor detection
>>>> // omitted for simplicity
>>>>
>>> Doh! It's not possible to detect default constructibility, correct?
>>>
>>>
>>> So we'd have to declare it as
>>>
>>> template<typename T, typename DefaultConstructible =
>>> mpl::false_> struct constructor;
>>
>> No. If the interface is "construct<T>(sequence)", then you can
>> dispatch on the size of the sequence. You'd only try to default
>> construct when you pass an empty sequence.
>
> Why is there a need to detect a default constructor?
(I probably snipped away too much context...)
A generic function object that constructs an arbitrary type would have
to know (unless having variadic templates, or being able to define
operator() as a nonmember function template).
This generalization would be useful to e.g. say
boost::bind( constructor<T>(), 55, _2, _1)
or make the implementation of the discussed Fusion utility
'construct<T>(fusion_sequence)' as simple as
template<typename T, typename FusionSequence>
T construct<T>(FusionSequence & seq)
{
return invoke_function_object(
constructor<T>(), seq);
}
(the other stuff exists already).
Regards,
Tobias
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk