std::enable_if - cppreference.com
Da cppreference.com.
|
|
Questa pagina è stata tradotta in modo automatico dalla versione in ineglese della wiki usando Google Translate. La traduzione potrebbe contenere errori e termini strani. Muovi il puntatore sopra al testo per vedere la versione originale. Puoi aiutarci a correggere gli gli errori. Per ulteriori istruzioni clicca qui. |
<metanoindex/>
<tbody> </tbody>
| Elemento definito nell'header <type_traits> |
||
|
|
(dal C++11) | |
Se B è true, std::enable_if ha un type membro pubblico typedef, pari a T, altrimenti, non vi è nessun membro typedef.
Original:
If B is true, std::enable_if has a public member typedef type, equal to T; otherwise, there is no member typedef.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Questo MetaFunction viene utilizzato per rimuovere in modo condizionale funzioni e le classi di risoluzione sovraccarico sulla base di caratteri morfologici e per fornire overload della funzione separati e specializzazioni per i tratti di tipo diverso. std::enable_if può essere usato come un argomento di funzione aggiuntiva (non applicabile ai overload dell'operatore), come un tipo di ritorno (non applicabile ai costruttori e distruttori), o come un modello di classe o un modello di parametro di funzione.
Original:
This metafunction is used to conditionally remove functions and classes from overload resolution based on type traits and to provide separate function overloads and specializations for different type traits. std::enable_if can be used as an additional function argument (not applicable to operator overloads), as a return type (not applicable to constructors and destructors), or as a class template or function template parameter.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Membri tipi
Tipo Original: Type The text has been machine-translated via Google Translate. |
Definition |
type
|
Original: either The text has been machine-translated via Google Translate. |
Possibile implementazione
template<bool B, class T = void> struct enable_if {}; template<class T> struct enable_if<true, T> { typedef T type; };
Esempio
#include <type_traits> #include <iostream> // foo1 overloads are enabled via the return type template<class T> typename std::enable_if<std::is_floating_point<T>::value, T>::type foo1(T t) { std::cout << "foo1: float\n"; return t; } template<class T> typename std::enable_if<std::is_integral<T>::value, T>::type foo1(T t) { std::cout << "foo1: int\n"; return t; } // foo2 overload is enabled via a parameter template<class T> T foo2(T t, typename std::enable_if<std::is_integral<T>::value >::type* = 0) { return t; } // foo3 overload is enabled via a template parameter template<class T , class = typename std::enable_if<std::is_integral<T>::value>::type > T foo3(T t) // note, function signature is unmodified { return t; } // A is enabled via a template parameter template<class T, class Enable = void> class A; // undefined template<class T> class A<T, typename std::enable_if<std::is_floating_point<T>::value >::type> { }; int main() { foo1(1.2); // OK, calls the first version of foo1() foo1(10); // OK, calls the second version of foo1() // foo2(0.1); // compile-time error foo2(7); // OK // A<int> a1; // compile-time error A<double> a1; // OK }
Output: