首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std::bool_constant背后的理论基础

std::bool_constant背后的理论基础
EN

Stack Overflow用户
提问于 2015-06-03 17:20:20
回答 1查看 3.4K关注 0票数 10

我想知道,引入std::bool_constant及其随后用于std::true_typestd::false_type的基本原理是什么(以及header <ratio>,cf中定义的比较结构)。( N4389)在C++17?

到目前为止,我只找到了包含以下内容的文件:

  • http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4334.html
  • http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4389.html

虽然这两篇论文都提到了一个“基本原理”-- bug.cgi?id=51 --链接--评论提要--主要是说这是“基于对c++std*的讨论”(大概是指私有反射器?)没有进一步的细节。

以下是文档:constant

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-03 17:32:01

这是纯粹的句法糖。通常,我们会像这样使用例如标签分发:

代码语言:javascript
复制
void foo_impl(std::false_type) { /*Implementation for stuff (and char) */}
void foo_impl(std::true_type ) { /*Implementation for integers but not char*/}

template <typename T>
void foo(T) {
    foo_impl(t, std::bool_constant<std::is_integral<T>{} && !std::is_same<char, T>{}>());
}

如果没有bool_constant,我们必须使用更长的类型说明符来指定所需的类型:std::integral_constant<bool, ...>。由于对布尔值使用integral_constant的情况特别频繁,因此需要一种简洁而简短的专门化处理方法,而bool_constant提供了这一点。

实际上,bool_constant不过是bool-specializations of integral_constant的别名模板。

代码语言:javascript
复制
template <bool B>
using bool_constant = integral_constant<bool, B>;

更改true_typefalse_type的声明(以及integral_constant<bool, ..>的其他用途)的唯一原因是为了简化标准,甚至没有技术需要,因为integral_constant<bool, false>bool_constant<false>指定的类型完全相同。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30626690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档