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` aide-t-il à définir conditionnellement les types de retour de fonction et à activer la résolution de fonction ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-08 19:57:01525parcourir

How does `std::enable_if` help conditionally define function return types and enable function resolution?

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(1); sans cela, la fonction nécessiterait deux paramètres de modèle au lieu d'un.

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::is_integer>. Dans les anciennes versions de Visual Studio, les paramètres de modèle par défaut ne sont pas pris en charge, donc std::enable_if ne peut être utilisé que lors du retour de la fonction, comme le montre l'exemple « std::numeric_limits as a Condition ».

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!

Déclaration:
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