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)))
{}
is_const<> SFINAE 排除将 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))
{}
如果移除 is_const<> 排除项,常规复制构造函数处理 const 值的方式与完美正向构造函数的处理方式有何不同?
最佳答案
第一个专门用于右值引用(enable_if
确保它)。
static_cast 是使用 std::move
的同义词,所以它会移动。
关于c++ - boost::any 构造函数 - const 类型重载解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35419402/