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.

È stato utile?

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> {
};
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top