是否有'choose <bool,typename,typename>'的标准结构?</bool,typename,typename>

时间:2011-06-18 17:40:04

标签: c++ templates metaprogramming conditional

我有时发现自己需要以下内容:

template<bool B, typename T1, typename T2>
struct choose{
  typedef T1 type;
};

template<typename T1, typename T2>
struct choose<false, T1, T2>{
  typedef T2 type;
};

我用它来有条件地选择一种或另一种。现在,标准库中是否已经有了这样的功能呢? Boost.MPL has something similar,但这不完全相同(采用类型,而不是bool),我不想将Boost包含在这个小东西中。 :)

1 个答案:

答案 0 :(得分:6)

是的:它在C ++ 0x(或Boost中的std::conditional)中称为boost::conditional

您引用的boost::mpl::if具有相应的boost::mpl::if_c,其中bool代替类型;这是Boost类型特征库中的常见模式。