Maison >développement back-end >C++ >Comment utiliser `decltype` avec une fonction de modèle variadique pour calculer la somme de ses arguments ?
Type de retour de fin utilisant decltype avec une fonction de modèle variadique
Lors de la tentative de création d'une fonction qui accumule la somme de ses arguments à l'aide d'une fonction variadique modèle et la syntaxe du type de retour final, des défis surviennent. Plus précisément, le compilateur peut rencontrer des erreurs pour les fonctions comportant plus de deux arguments. En effet, le modèle de fonction variadique n'est considéré comme déclaré qu'après avoir spécifié son type de retour, ce qui entraîne une situation dans laquelle sum dans decltype ne peut pas faire référence au modèle de fonction variadique lui-même.
Une solution de contournement potentielle consiste à utiliser une classe de traits personnalisés pour évitez l'appel récursif dans l'expression decltype :
template<class T> typename std::add_rvalue_reference<T>::type val(); template<class T> struct id{typedef T type;}; template<class T, class... P> struct sum_type; template<class T> struct sum_type<T> : id<T> {}; template<class T, class U, class... P> struct sum_type<T,U,P...> : sum_type< decltype( val<const T&>() + val<const U&>() ), P... > {};
Cela permet de remplacer decltype dans le programme d'origine par le nom de type sum_type
Afin de garantir que la sommation respecte l'ordre des opérations (par exemple, a (bc)), la spécialisation finale de sum_type peut être modifiée comme suit :
template<class T, class U, class... P> struct sum_type<T,U,P...> : id<decltype( val<T>() + val<typename sum_type<U,P...>::type>() )>{};
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!