提升::任何构造函数 - 常量类型重载分辨率

boost::any constructors - const type overload resolution

本文关键字:类型 重载 分辨率 常量 任何 构造函数 提升      更新时间:2023-10-16

boost::any 有一个完美的前向构造函数声明为:

template<typename ValueType>
any(ValueType&& value
    , typename boost::disable_if<boost::is_same<any&, ValueType> >::type* = 0 // disable if value has type `any&`
    , typename boost::disable_if<boost::is_const<ValueType> >::type* = 0) // disable if value has type `const ValueType&&`
  : content(new holder< typename decay<ValueType>::type >(static_cast<ValueType&&>(value)))
{}

SFINAE 排除is_const<>强制 const 类型使用常规复制构造函数:

template<typename ValueType>
any(const ValueType & value)
  : content(new holder<
        BOOST_DEDUCED_TYPENAME remove_cv<BOOST_DEDUCED_TYPENAME decay<const ValueType>::type>::type
    >(value))
{}

常规复制构造函数处理 const 值的方式与删除is_const<>排除项时完美正向构造函数处理的方式有何不同?

第一个专门用于右值引用(enable_if确保它(。

static_cast是使用std::move的同义词,所以它会移动。