"选择<布尔,类型名,类型名>"是否有标准结构?

Is there a standard construct for 'choose<bool,typename,typename>'?

本文关键字:类型 标准 结构 gt lt 选择 布尔 是否      更新时间:2023-10-16

我有时发现自己需要以下几点:

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有类似的东西,但这并不完全相同(采用类型,而不是布尔值(,我不想为这个小东西包含Boost。:)

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

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