我的目标是保证所有变种类型的单一存储:根据Boost :: variant的'never empty'保证,我们需要覆盖
boost::has_nothrow_copy每个有界类型.但稍后文档提到了一些内容'boost::blank',如果该类型被绑定,variant将设置该值而不是尝试不提供默认的副本构造函数.
不清楚的是,如果在有界类型列表中添加boost :: blank将避免覆盖/专门化has_nothrow_copy
其他类型的要求吗?
我相信这一点很明确.以下是boost文档中的相关部分:
因此,变量被设计为一旦满足其有界类型的以下标准就能够进行以下优化:
对于不可复制构造的每个有界类型T(如boost :: has_nothrow_copy所示),库保证变体将仅使用T的单个存储和就地构造.
如果任何有界类型不是默认可构造的(如boost :: has_nothrow_constructor所示),则库保证变体将仅对变体中的每个有界类型使用单个存储和就地构造.但是请注意,在赋值失败的情况下,未指定的nothrow default-constructible有界类型将在左侧操作数中默认构造,以便保留永不空的保证.
由于boost::blank不是默认的可构造的,所以第二个条款适用.并且听起来Boost特别为这个特定类型选择了有利于所有其他类型,因此,如果没有指定哪个默认的可构造类型将被实例化,那么类型将保证boost::blank是否是一个选项.
| 归档时间: |
|
| 查看次数: |
1188 次 |
| 最近记录: |