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
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!