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