Frage

-Boost hat sowohl enable_if und disable_if, aber C ++ 0x scheint letzteres zu fehlen. Warum war es ausgelassen? Gibt es Meta-Programmierung Einrichtungen in C ++ 0x, die mich zu bauen disable_if in Bezug auf enable_if erlauben?


Oh, ich habe gerade bemerkt, dass std::enable_if ist im Grunde boost::enable_if_c, und dass es nicht so etwas wie boost::enable_if in C ++ 0x.

War es hilfreich?

Lösung

Auf der Gefahr scheinbar dumm, tut nur !expression statt expression in den bool Template-Parametern in enable_if, um es wie ein disable_if verhalten? Natürlich, wenn diese Idee funktioniert, könnten Sie einfach auf diesen erweitern eine Klasse mit disable_if artigem Verhalten zu schreiben?

Ok, ich glaube, Sie disable_if wie folgt implementieren könnte:

template <bool B, typename T = void>
struct disable_if {
    typedef T type;
};

template <typename T>
struct disable_if<true,T> {
};
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top