Maison > développement back-end > C++ > le corps du texte

Comment assurer l'homogénéité des types d'arguments dans les fonctions variadiques ?

Susan Sarandon
Libérer: 2024-11-17 09:17:03
original
635 Les gens l'ont consulté

How to Ensure Argument Type Homogeneity in Variadic Functions?

Assurer l'homogénéité des types d'arguments dans les fonctions variadiques sans modifications structurelles

Lors de la définition de fonctions avec des arguments variadiques, il est souvent souhaitable de s'assurer que tous les arguments fournis sont du même type . Cela permet de maintenir la sécurité des types et d'éviter les erreurs potentielles.

Les fonctions variadiques elles-mêmes n'appliquent pas la sécurité des types, laissant le programmeur responsable de la vérification explicite. Cependant, une combinaison de techniques peut être utilisée pour mettre en œuvre cette exigence de manière efficace.

Option 1 : approche de conversion ultérieure

Une méthode consiste à accepter les arguments comme variadiques et effectuer la conversion de type plus tard. Par exemple, si vous connaissez les étapes nécessaires pour convertir de std::array en dragon_list_t, la fonction de modèle suivante peut être utilisée :

template<typename ...Items>
dragon_list_t make_dragon_list(Items... maidens) {
    std::array<Maiden, sizeof...(Items)> arr = {{ maidens ... }};
    // Here be dragons
}
Copier après la connexion

Option 2 : approche de rejet précoce basée sur SFINAE

Une autre option consiste à utiliser l'échec de substitution n'est pas une erreur (SFINAE) pour effectuer une vérification de type au niveau de l'interface de fonction. Cette technique permet une résolution de surcharge pour rejeter dès le début les types d'arguments non valides :

template<typename R, typename... Args>
struct fst { typedef R type; };

template<typename ...Args>
typename fst<void, 
  typename enable_if<
    is_convertible<Args, ToType>::value
  >::type...
>::type 
f(Args...);
Copier après la connexion

Dans cet exemple, la fonction f sera instanciée uniquement lorsque tous les arguments fournis sont convertibles en type ToType.

Conclusion

En utilisant soit l'approche de conversion ultérieure, soit l'approche de rejet anticipé basée sur SFINAE, les développeurs peuvent spécifier un type pour tous les arguments transmis aux fonctions variadiques ou aux fonctions de modèle variadiques sans avoir recours à à des structures supplémentaires ou des frais généraux.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal