Dove si trova disable_if in C ++ 0x?
Domanda
Boost ha sia enable_if
e disable_if
, ma C ++ 0x sembra mancare quest'ultima. Perché è stato lasciato fuori? Ci sono strutture di meta-programmazione in C ++ 0x che mi permetterà di costruire disable_if
in termini di enable_if
?
Oh, ho appena notato che std::enable_if
è fondamentalmente boost::enable_if_c
, e che non esiste una cosa come boost::enable_if
in C ++ 0x.
Soluzione
A rischio di sembrare stupido, basta fare !expression
invece di expression
nel parametro template bool in enable_if
per renderlo comportarsi come un disable_if
? Naturalmente se che le opere idea, si può solo espandere su di esso per scrivere una classe con disable_if
simile comportamento?
Ok, credo si potrebbe implementare disable_if
in questo modo:
template <bool B, typename T = void>
struct disable_if {
typedef T type;
};
template <typename T>
struct disable_if<true,T> {
};