"选择<布尔,类型名,类型名>"是否有标准结构?
Is there a standard construct for 'choose<bool,typename,typename>'?
我有时发现自己需要以下几点:
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 类型特征库中的常见模式。
相关文章:
- 编译标准库类型
- 铸造标准::有没有回到原来的类型
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- 标准库类型的赋值运算符的引用限定符
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- 根据C++标准的定义实现"is_similar"类型特征
- C++ 模板类型检查标准::is_same不起作用?
- 标准::原子中的自定义类型
- 标准::时间::d类型的挥发性对象
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- 如何声明一个标准::提升直方图的向量?提升直方图的类型是什么?
- 标准::p空气<自动,自动>返回类型
- 标准::map键类型的严格弱排序概念
- MacOS 上的 LLVM - 标准文件 iosfwd 中未知类型名称'template'
- 标准::enable_if类型检查
- 使用C++11标准的哪些规则来确定({..})中表达式的类型
- 如何为缺少预定义运算符而不扩展命名空间"std"的标准类型定义运算符>> (istream &, ...)?
- POD类型是否完全等同于琐碎的标准布局类型
- 聚合类型是否意味着它也是标准布局
- 将积分类型的数组作为另一个不相关的积分类型的阵列进行访问的安全且符合标准的方法