Maison >développement back-end >C++ >Comment appliquer la cohérence des types dans les fonctions variadiques sans structures supplémentaires ?

Comment appliquer la cohérence des types dans les fonctions variadiques sans structures supplémentaires ?

DDD
DDDoriginal
2024-11-13 12:59:02955parcourir

How to Enforce Type Consistency in Variadic Functions Without Additional Structures?

Application de la cohérence des types dans les fonctions variadiques sans structures supplémentaires

Les fonctions variadiques et les fonctions de modèle variadiques nous permettent de transmettre un nombre variable d'arguments à un fonction. Cependant, s’assurer que tous les arguments ont le même type peut s’avérer difficile. Cette question explore une solution à ce problème sans utiliser de tableaux, de vecteurs ou de structures.

Approche des fonctions variadiques

La solution proposée consiste à accepter les arguments par le modèle variadique et laissez la vérification de type vérifier la validité lorsqu'ils sont convertis. Cependant, cette approche nécessite que nous disposions d’un chemin de conversion connu vers le type souhaité. Dans ce cas, il doit exister un moyen connu de convertir un tableau de Maiden en dragon_list_t.

Exemple :

template<typename ...Items>
dragon_list_t make_dragon_list(Items... maidens) {
    std::array<Maiden, sizeof...(Items)> arr = {{ maidens ... }};
    // here be dragons
}

Approche SFINAE

SFINAE (Substitution Failure Is Not An Error) peut être utilisé pour renforcer la cohérence des types au niveau de l'interface de fonction. Cela nous permet de rejeter les arguments invalides dès le début du processus de résolution de surcharge.

Exemple :

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

template<typename ...Args>
typename fst<void, 
  typename enable_if<
    is_convertible<Args, ToType>::value
  >::type...
>::type 
f(Args...);

Conclusion

Les deux approches permettent de spécifier un type pour tous les arguments transmis aux fonctions variadiques sans utiliser de structures de données supplémentaires. L'approche des fonctions variadiques s'appuie sur des chemins de conversion connus, tandis que l'approche SFINAE permet une résolution de surcharge pour rejeter les arguments non valides. Le choix entre ces approches dépend des exigences du cas d'utilisation spécifique.

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