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 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>
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>
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>
La valeur par défaut (0) pour le deuxième paramètre du modèle est fournie uniquement pour activer l'appel foo
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
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!