|
Boost : |
From: Joel de Guzman (joel_at_[hidden])
Date: 2007-06-17 15:52:16
dan marsden wrote:
> The definition of Fusion polymorphic function object will be changed shortly
> to be consistent with boost.resultof. Instead of requiring a nested result
> metafunction of the form:
>
> template<typename T0, typename T1, ... typename TN> struct result { typedef
> xxx type; };
>
> A polymorphic function object will instead simply be required to suppport
>
> boost::result_of<F(A,B,...Z)>::type
>
> as a valid expression.
>
> This will break some Fusion client code, specifically, if you are using fold,
> accumulate, transform, or a lot of the components in the functional section
> of the library, you may need to make changes to support this change.
>
> The change should be entered into CVS head over the forthcoming weekend.
>
> Apologies to anyone whos code this breaks, but this should make things more
> consistent with the rest of boost going forwards.
Thanks Dan!
(CC'ing Doug)
Doug, I know the result_of interface is almost standard now, but I
still wonder about the redundancy of the function-object interface:
F::result<F(T1, T2,..., TN)>::type
Is there a rationale? F is redundant here. The former fusion result API
does not require the F. Now, for example, instead of writing:
struct square
{
template<typename T>
struct result
{
typedef int type;
};
template <typename T>
int operator()(T x) const
{
return x * x;
}
};
We have to write it as:
struct square
{
template<typename T>
struct result;
template <typename T>
struct result<square(T)>
{
typedef int type;
};
template <typename T>
int operator()(T x) const
{
return x * x;
}
};
I'm not complaining, we already bit the conformance bullet :P
Just wondering why the latter is superior to the former.
Regards,
-- Joel de Guzman http://www.boost-consulting.com http://spirit.sf.net
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk