28 #ifndef YB_INC_ystdex_mixin_hpp_
29 #define YB_INC_ystdex_mixin_hpp_ 1
44 template<
class... _tBases>
52 template<
typename _tParam,
58 template<
typename _tParam1,
typename _tParam2,
typename... _tParams>
60 mixin(_tParam1&& arg1, _tParam2&& arg2, _tParams&&...
args)
64 template<
typename... _tParams>
66 mixin(
const std::tuple<_tParams...>& tp,
68 :
mixin(std::get<0>(tp))
70 template<
typename... _tParams>
72 mixin(std::tuple<_tParams...>&& tp,
74 :
mixin(std::get<0>(std::move(tp)))
76 template<
typename... _tParams>
78 mixin(
const std::tuple<_tParams...>& tp,
82 template<
typename... _tParams>
84 mixin(std::tuple<_tParams...>&& tp,
88 template<
size_t... _vSeq,
typename... _tParams>
91 : _tBases(
yforward(std::get<_vSeq>(tp)))...
93 template<
size_t... _vSeq,
typename... _tParams>
96 : _tBases(
yforward(std::get<_vSeq>(tp)))...
106 return this->
template
109 template<
size_t... _vSeq>
122 template<
class,
class>
125 template<
size_t... _vSeq,
typename... _types>
140 template<
typename... _types>
mixin(const std::tuple< _tParams...> &tp, enable_if_t<(sizeof...(_tBases) > 1)> *={})
typename std::tuple_element< _vIdx, _type >::type tuple_element_t
yconstfn const string _tParams && args
mixin(variadic_sequence< _vSeq...>, const std::tuple< _tParams...> &tp)
mixin(std::tuple< _tParams...> &&tp, enable_if_t<(sizeof...(_tBases) > 1)> *={})
mixin(variadic_sequence< _vSeq...>, std::tuple< _tParams...> &&tp)
#define yforward(_expr)
根据参数类型使用 std::forward 传递对应参数。
typename details::wrap_mixin_helper< make_natural_sequence_t< sizeof...(_types)>, std::tuple< _types...>>::type wrap_mixin_t
包装为混入类。
mixin(const std::tuple< _tParams...> &tp, enable_if_t< sizeof...(_tBases)==1 > *={})
tuple_type to_tuple(variadic_sequence< _vSeq...>) const
mixin(_tParam1 &&arg1, _tParam2 &&arg2, _tParams &&...args)
tuple_type to_tuple() const
conditional_t< std::is_class< _type >::value, _type, boxed_value< _type >> classify_value_t
包装非类类型为类类型。
std::tuple< _tBases...> tuple_type
#define yconstfn
指定编译时常量函数。
enable_if_t<!is_same< _tClass &, remove_rcv_t< _tParam > & >::value, _type > exclude_self_ctor_t
移除选择类类型的特定重载避免构造模板和复制/转移构造函数冲突。
typename enable_if< _bCond, _type >::type enable_if_t
mixin(std::tuple< _tParams...> &&tp, enable_if_t< sizeof...(_tBases)==1 > *={})
typename make_natural_sequence< _vN >::type make_natural_sequence_t