Pourquoi devriez-vous éviter std::enable_if dans les signatures de fonction ?
std::enable_if est un outil puissant pour la métaprogrammation de modèles conditionnels, mais son utilisation abusive dans les signatures de fonctions peut conduire à divers pièges. Cet article explique pourquoi vous devriez généralement éviter d'utiliser std::enable_if dans les signatures de fonction et propose des approches alternatives.
Activations du paramètre de fonction
Lorsqu'il est utilisé comme paramètre de fonction, std ::enable_if peut encombrer les signatures de fonctions avec des expressions de noms de types complexes. Cela dégrade la lisibilité et rend le code plus difficile à maintenir. Par exemple :
<code class="cpp">template<typename T> struct Check1 { template<typename U = T> U read(typename std::enable_if< std::is_same<U, int>::value >::type* = 0) { return 42; } template<typename U = T> U read(typename std::enable_if< std::is_same<U, double>::value >::type* = 0) { return 3.14; } };</code>
Activations des paramètres du modèle
L'approche recommandée consiste à placer std::enable_if dans les paramètres du modèle :
<code class="cpp">template<typename T> struct Check2 { template<typename U = T, typename std::enable_if< std::is_same<U, int>::value, int>::type = 0> U read() { return 42; } template<typename U = T, typename std::enable_if< std::is_same<U, double>::value, int>::type = 0> U read() { return 3.14; } };</code>
Cette approche améliore la lisibilité en séparant les paramètres du modèle des types de retour/argument. Il offre également une applicabilité universelle, car les constructeurs et certains opérateurs ne peuvent pas avoir d'arguments ou de types de retour supplémentaires.
Activations du type de retour
L'utilisation de std::enable_if comme type de retour est ne fait pas partie d'une signature de fonction typique. Cependant, cela peut être trompeur et doit généralement être évité.
Modèles membres et non-membres
Les préoccupations mentionnées dans cet article s'appliquent également aux membres et aux non-membres. -modèles de fonctions membres.
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!