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
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
Détails remarquables
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