std::variant
除了(或什至代替)get< T >()
自由函数(草案的第 568 页)之外,使类的一部分成为显式转换(替代)运算符重载集有什么缺点?
template<class... Types>
class variant
{
template<class T>
explicit operator const T& () const&;
template<class T>
explicit operator T& () &;
template<class T>
explicit operator const T&& () const &&;
template<class T>
explicit operator T&& () &&;
};
在某些情况下不安全吗?为什么我们需要自由get()
函数(即“类型”版本,而不是“索引”版本),当变体暴露一个值语义时(引自草案):
变体对象保存并管理值的生命周期。
使变体显式可转换为替代方案还不够,但仍可从替代方案隐式构造吗?
我知道,接口的统一性是件好事(我记得我们需要get< I >()
与get< T >()