J'ai du mal à comprendre la nécessité d' std::result_of
dans C++0x. Si j'ai bien compris, result_of
est utilisé pour obtenir le type résultant de l'appel d'une fonction de l'objet avec certains types de paramètres. Par exemple:
template <typename F, typename Arg>
typename std::result_of<F(Arg)>::type
invoke(F f, Arg a)
{
return f(a);
}
Je ne vois pas vraiment la différence avec le code suivant:
template <typename F, typename Arg>
auto invoke(F f, Arg a) -> decltype(f(a)) //uses the f parameter
{
return f(a);
}
ou
template <typename F, typename Arg>
auto invoke(F f, Arg a) -> decltype(F()(a)); //"constructs" an F
{
return f(a);
}
Le seul problème que je peux voir avec ces deux solutions, c'est que nous avons besoin de:
- avons une instance de functor pour l'utiliser dans l'expression passée à decltype.
- savoir un constructeur défini pour le foncteur.
Suis-je en droit de penser que la seule différence entre decltype
et result_of
c'est que le premier a besoin d'une expression, alors que le second ne l'est pas?