C++ 0x中的disable_if在哪里?

fre*_*low 20 c++ templates boost enable-if c++11

Boost有两个enable_ifdisable_if,但C++ 0x似乎缺少后者.为什么遗漏了?在C++ 0x中有元编程工具,让我建立disable_if在以下方面enable_if


哦,我刚刚注意到这std::enable_if基本上boost::enable_if_c就是boost::enable_ifC++ 0x中没有这样的东西.

Jac*_*cob 18

在看似愚蠢的风险,只是做!expression的,而不是expression在布尔模板参数,enable_if使它像一个disable_if?当然,如果这个想法有效,你可以扩展它来写一个类似disable_if行为的类吗?

好的,我相信你可以disable_if像这样实现:

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

template <typename T>
struct disable_if<true,T> {
};
Run Code Online (Sandbox Code Playgroud)

  • 这可以更简单地写成:`template <bool B,typename T = void> using disable_if = std :: enable_if <!B,T>;` (16认同)
  • 是的,我刚刚意识到`enable_if`采用`bool`而不是类型,因此否定条件是微不足道的.但是,它会使代码更具可读性'disable_if`. (5认同)
  • 诺亚陷入了和我一样的陷阱:) (2认同)