总体结构
variant
首先是variant
的结构,variant
的模板声明长这样:
1 2 3 4 5 6 7 8 9 10 11 12
| template<typename... _Types> class variant : private __detail::__variant::_Variant_base<_Types...>, private _Enable_default_constructor< __detail::__variant::_Traits<_Types...>::_S_default_ctor, variant<_Types...>>, private _Enable_copy_move< __detail::__variant::_Traits<_Types...>::_S_copy_ctor, __detail::__variant::_Traits<_Types...>::_S_copy_assign, __detail::__variant::_Traits<_Types...>::_S_move_ctor, __detail::__variant::_Traits<_Types...>::_S_move_assign, variant<_Types...>>
|
_Enable_copy_move
在上一篇optional解析中解释了,这里不同之处在于要考察variant
的模板参数包内多个类型的可复制性、可移动性,如果其中某个类型不可复制或不可移动,那么variant
亦不可复制或不可移动。
_Enable_default_constructor
为用于生成默认构造的helper模板,代码长这样: