gpt4 book ai didi

c++ - 为什么 libcxx 中的 __dependent_type 使用模板非类型参数 bool _Dummy?

转载 作者:行者123 更新时间:2023-11-30 03:19:11 26 4
gpt4 key购买 nike

这里是 __dependent_type 的定义:

template <class _Tp, bool>
struct _LIBCPP_TEMPLATE_VIS __dependent_type : public _Tp {};

所有用例:

/usr/.../c++/v1 >>> rg "_dependent_type"                                                                                                                      
memory
2211: __dependent_type<is_default_constructible<_T1>, _Dummy>::value &&
2212: __dependent_type<is_default_constructible<_T2>, _Dummy>::value
2402: typename __dependent_type<_DeleterSFINAE, _Dummy>::__lval_ref_type;
2406: typename __dependent_type<_DeleterSFINAE, _Dummy>::__good_rval_ref_type;
2410: typename __dependent_type<_DeleterSFINAE, _Dummy>::__bad_rval_ref_type;
2412: template <bool _Dummy, class _Deleter = typename __dependent_type<
2671: typename __dependent_type<_DeleterSFINAE, _Dummy>::__lval_ref_type;
2675: typename __dependent_type<_DeleterSFINAE, _Dummy>::__good_rval_ref_type;
2679: typename __dependent_type<_DeleterSFINAE, _Dummy>::__bad_rval_ref_type;
2681: template <bool _Dummy, class _Deleter = typename __dependent_type<

variant
1134: enable_if_t<__dependent_type<is_default_constructible<__first_type>,
1292: __dependent_type<is_move_constructible<_Types>, _Dummy>::value &&
1293: __dependent_type<is_swappable<_Types>, _Dummy>::value)...>::value,

tuple
621: __lazy_all<__dependent_type<is_default_constructible<_Tp>, _Dummy>...>

问题:

不是

template <class _Tp>
struct _LIBCPP_TEMPLATE_VIS __dependent_type : public _Tp {};

 __dependent_type<is_default_constructible<_T1>>::value

够了吗?

为什么 libcxx 需要这个虚拟 bool 值?

最佳答案

它是使类型依赖的虚拟 bool,这是 __dependent_type 的全部要点,否则你可以只使用类型本身。

以这段代码为例:

  template <bool _Dummy>
using _GoodRValRefType =
typename __dependent_type<_DeleterSFINAE, _Dummy>::__good_rval_ref_type;

如果没有使它成为依赖类型的虚拟对象,当类模板被实例化时,_DeleterSFINAE::__good_rval_ref_type 可能会导致硬错误,因为不是所有的 _DeleterSFINAE有一个 __good_rval_ref_type 成员。

依赖类型延迟求值,因此您稍后可以在 SFINAE 上下文中使用 _GoodRValRefType

关于c++ - 为什么 libcxx 中的 __dependent_type 使用模板非类型参数 bool _Dummy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53901072/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com