Où se trouve disable_if dans C ++ 0x?
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.
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> {
};