Maison > développement back-end > C++ > le corps du texte

Comment fonctionne « std::enable_if » : percer les mystères de sa mise en œuvre et de son utilisation ?

Barbara Streisand
Libérer: 2024-11-05 07:52:02
original
675 Les gens l'ont consulté

How Does `std::enable_if` Work: Unraveling the Mysteries of Its Implementation and Usage?

Comprendre std::enable_if : déchiffrer son objectif et sa mise en œuvre

Bien que la nature de std::enable_if soit comprise dans certains contextes, son Les subtilités, en particulier le deuxième argument et l'affectation à std::enable_if dans l'instruction modèle, restent énigmatiques. En approfondissant son fonctionnement, nous percerons ces mystères.

Les éléments essentiels de std::enable_if

std::enable_if est un modèle spécialisé défini comme suit :

<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, le type alias typedef T type n'est défini que lorsque Cond est vrai.

Dévoilement de l'utilisation

Considérez la déclaration 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

Ici, le type de retour de foo est défini par std::enable_if::is_integer, void>::type. Puisque std::numeric_limits::is_integer est une condition booléenne, ce type de retour ne sera défini que si la condition est vraie.

Clarification du deuxième argument

Dans la notation :

<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 = 0 est utilisé par défaut pour le deuxième paramètre du modèle. Cela permet aux deux options d'être invoquées à l'aide de foo(1), au lieu d'exiger deux paramètres de modèle si le paramètre std::enable_if n'était pas défini par défaut.

Détails remarquables

  • Taper explicitement le nom de type std::enable_if::type améliore la clarté.
  • En C 14, activate_if_t est un type établi qui doit être utilisé pour le type de retour, en le simplifiant en std::enable_if_t.
  • Pour les versions de Visual Studio antérieures à 2013, seul le type de retour peut utiliser activate_if.

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!

source:php.cn
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!