Maison >développement back-end >C++ >Comment appliquer la cohérence des types dans les fonctions variadiques sans structures supplémentaires ?
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!