Maison  >  Article  >  développement back-end  >  Comment obtenir un type de retour final avec une fonction de modèle variadique pour la sommation ?

Comment obtenir un type de retour final avec une fonction de modèle variadique pour la sommation ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-09 12:34:02309parcourir

 How to Achieve Trailing Return Type with a Variadic Template Function for Summation?

Type de retour de fin utilisant decltype avec une fonction de modèle variadique

Cette enquête cherche à construire un additionneur de base qui calcule la somme d'un nombre quelconque de arguments avec le type de retour approprié. Cependant, l'implémentation actuelle présente des limites avec plusieurs arguments. Cet article étudie le problème sous-jacent et explore une solution de contournement potentielle.

L'implémentation initiale utilise la syntaxe du type de retour final pour simplifier la fonction de sommation. Cependant, pour les arguments dépassant deux, des erreurs de compilation surviennent, indiquant que la fonction n'est pas définie. Cette anomalie vient du fait que le modèle de fonction variadique est déclaré après que son type de retour soit spécifié. Par conséquent, l'expression decltype() ne peut pas faire référence au modèle de fonction variadique lui-même.

Bien que C 0x autorise les appels récursifs dans la partie ->decltype(expr), il peut ne pas prendre en charge des scénarios spécifiques comme celui-ci. . Pour résoudre ce problème, une classe de traits personnalisés, sum_type, est introduite comme solution de contournement. Il permet le remplacement de decltype par typename sum_type::type, résolvant les problèmes de compilation.

Cependant, l'implémentation initiale renvoie decltype((a b) c) au lieu du attendu decltype(a (bc)). Pour remédier à cela, la spécialisation sum_type peut être modifiée pour garantir l'ordre des opérations souhaité, conduisant à la solution finale.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn