Maison > développement back-end > C++ > Comment `std::enable_if` aide-t-il à définir conditionnellement les types de retour de fonction et à activer la résolution de fonction ?

Comment `std::enable_if` aide-t-il à définir conditionnellement les types de retour de fonction et à activer la résolution de fonction ?

Patricia Arquette
Libérer: 2024-11-08 19:57:01
original
527 Les gens l'ont consulté

How does `std::enable_if` help conditionally define function return types and enable function resolution?

Comment std::enable_if facilite la résolution de fonctions conditionnelles

Comprendre l'échec de la substitution n'est pas une erreur est crucial pour comprendre 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

La clé est que le type n'est défini que lorsque la condition est vraie.

Considérez la fonction suivante :

<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

std::enable_if est utilisé pour définir conditionnellement le type de retour de la fonction, provoquant une erreur de compilation si la condition est false.

Dans l'extrait de code :

<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

La valeur par défaut (0) pour le deuxième paramètre du modèle est fournie uniquement pour activer l'appel foo(1); sans cela, la fonction nécessiterait deux paramètres de modèle au lieu d'un.

Remarque : En C 14, activate_if_t est un type défini qui doit être utilisé pour plus de clarté. Ainsi, le type de retour peut être condensé en std::enable_if_t::is_integer>. Dans les anciennes versions de Visual Studio, les paramètres de modèle par défaut ne sont pas pris en charge, donc std::enable_if ne peut être utilisé que lors du retour de la fonction, comme le montre l'exemple « std::numeric_limits as a Condition ».

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