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 ?

Comment std::enable_if fonctionne-t-il avec les types de retour conditionnels et les paramètres de modèle ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-05 21:26:02923parcourir

How Does std::enable_if Work with Conditional Return Types and Template Parameters?

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(1);.

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