Supposons que j'ai une fonction qui additionne deux valeurs. Si je ne connais pas les types, je dois écrire ma fonction deux fois, une fois dans la valeur de retour réelle et une autre fois dans le spécificateur de type de retour :
template <typename A, typename B>
auto Add(const A& a, const B& b) ->std::decay<decltype(a + b)>::type
{
return a + b;
}
Bien que cette méthode fonctionne, elle n'est pas souhaitable car elle est difficile à lire et à maintenir.
En C++14, ce ne sera plus un problème, car nous pouvons abandonner le spécificateur de type de retour (je ne suis pas sûr qu'il fera la décadence cependant...). Pour l'instant, je suis coincé avec C++11.
D'après mon expérience, chaque fois que je cherche une fonctionnalité en C++ qui n'a pas encore fait son chemin dans la norme, mais pour laquelle il existe un besoin évident, l'option Bibliothèque Boost a généralement une solution. J'ai cherché dans la documentation, mais je n'ai rien trouvé qui puisse m'aider. Le site BOOST_AUTO_RETURN
y BOOST_TYPEOF_TPL
semblent davantage destinées à fournir des fonctionnalités C++11 aux utilisateurs de C++03.
En gros, ce que je cherche, c'est quelque chose qui exécute la fonctionnalité suivante :
template <typename A, typename B>
auto Add(const A& a, const B& b)
{
return a + b; // Deduce return type from this, like C++14 would
}
Existe-t-il une fonctionnalité de la bibliothèque Boost dont je ne suis pas au courant (ou une astuce dans C++11) qui me permettrait de renoncer à l'utilisation explicite de l'option -> decltype(...)
après chaque type de retour automatique ? Comment cela pourrait-il être mis en œuvre ?