"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment fonctionne « std::enable_if » : percer les mystères de sa mise en œuvre et de son utilisation ?

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

Publié le 2024-11-12
Parcourir:145

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 :

template struct enable_if {};
template struct enable_if { typedef T type; };

Surtout, 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 :

template
typename std::enable_if<:numeric_limits>::is_integer, void>::type foo(const T &bar) { isInt(bar); }

Ici, le type de retour de foo est défini par std::enable_if<:numeric_limits>::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 :

template::value, int>::type = 0>
void foo(const T& bar) { isInt(); }

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<:condition t>::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.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3