Maison > Article > développement back-end > Comment std::enable_if fonctionne-t-il avec les types de retour conditionnels et les paramètres de modèle ?
Comprendre std::enable_if
Comprendre std::enable_if nécessite une compréhension de l'échec de la substitution n'est pas une erreur.
Définition de std::enable_if
std::enable_if est un modèle spécialisé défini comme :
<code class="cpp">template<bool Cond, class T = void> struct enable_if {}; template<class T> struct enable_if<true, T> { typedef T type; };</code>
Essentiellement, la définition de type typedef T n'est déclenchée que lorsque bool Cond est vrai.
Utilisation dans les types de retour conditionnels
Considérons l'exemple :
<code class="cpp">template<typename T> typename std::enable_if<std::numeric_limits<T>::is_integer, void>::type foo(const T &bar) { isInt(bar); }</code>
Ici, le type de retour est défini par :
<code class="cpp">std::enable_if<std::numeric_limits<T>::is_integer, void>::type</code>
L'utilisation de activate_if garantit que foo a un type de retour valide uniquement si is_integer est vrai pour T.
Défaut du deuxième paramètre de modèle
Dans l'exemple :
<code class="cpp">template<typename T, typename std::enable_if<std::is_integral<T>::value, int>::type = 0> void foo(const T& bar) { isInt(); }</code>
Le deuxième paramètre de modèle est par défaut à 0. Cela permet à foo d'être appelé avec un seul paramètre de modèle, par exemple. foo
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!