Question

Boost a à la fois enable_if et disable_if, mais C ++ 0x semble manquer ce dernier. Pourquoi at-il été omis? Y at-il des installations de méta-programmation en C ++ 0x qui me permettent de construire disable_if en termes de enable_if?


Oh, je viens de remarquer que std::enable_if est essentiellement boost::enable_if_c, et qu'il n'y a pas une telle chose comme boost::enable_if dans C ++ 0x.

Était-ce utile?

La solution

Au risque de paraître stupide, il suffit de faire !expression au lieu de expression dans le paramètre de modèle bool dans enable_if pour qu'il se comporte comme un disable_if? Bien sûr, si cette idée fonctionne, vous pouvez simplement développer pour écrire une classe avec un comportement semblable à disable_if?

Ok, je crois que vous pourriez mettre en œuvre disable_if comme ceci:

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

template <typename T>
struct disable_if<true,T> {
};
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top