Maison > développement back-end > C++ > 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
Libérer: 2024-11-05 21:26:02
original
1076 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

Ici, le type de retour est défini par :

<code class="cpp">std::enable_if<std::numeric_limits<T>::is_integer, void>::type</code>
Copier après la connexion

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>
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal