除了(或者甚至代替) get< T >()
自由函数(draft的第568页)之外,让std::variant
类的一部分成为显式转换(到替代)操作符重载设置有什么缺点?
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()
函数(即“类型”版本,而不是“索引”版本),当variant公开一个值语义时(引用自草案):
变量对象保存和管理值的生命周期。
使一个变量显式地转换为alternative,但仍然隐式地从一个alternative构造,这还不够吗?
我知道,接口的一致性是一件好事(我记得我们需要get< I >()
和get< T >()
),但我认为更自然的方法是通过简单地转换为包含备用值,而不是对变体实例应用某些函数专门化。
https://stackoverflow.com/questions/39570686
复制相似问题