The base types of a type can be specified with the base_types<Ts...> attribute (or via the bases<Ts...> template variable). To get a usable type_list one has to currently use a combination of get_attribute, decltype and the type_list member typedef of base_types. This is bad for usability.
Solution
Add better support for enumerating base types by exposing a typedef and a member type_list on type_descriptor, implemented on top of base_types. Expose these via type_descriptor and in the refl:: and refl::descriptor:: namespaces for similarity with member_list.
Possible interface
Have base_types and indirect_base_types types, where the first variant is the directly declared bases, and the indirect variant is the full list of all direct and indirect bases.
Have declared_base_types and base_types types, where the first variant is the directly declared bases, and the indirect variant is the full list of all direct and indirect bases. This matches better with the naming convention in #27 (Support inherited members) but might be less clear.
Problem
The base types of a type can be specified with the
base_types<Ts...>
attribute (or via thebases<Ts...>
template variable). To get a usabletype_list
one has to currently use a combination ofget_attribute
,decltype
and thetype_list
member typedef ofbase_types
. This is bad for usability.Solution
Add better support for enumerating base types by exposing a typedef and a member type_list on type_descriptor, implemented on top of base_types. Expose these via type_descriptor and in the
refl::
andrefl::descriptor::
namespaces for similarity withmember_list
.Possible interface