diff --git a/include/fc/reflect/reflect.hpp b/include/fc/reflect/reflect.hpp index 1801471..bf68d17 100644 --- a/include/fc/reflect/reflect.hpp +++ b/include/fc/reflect/reflect.hpp @@ -325,6 +325,7 @@ template<> struct reflector {\ namespace member_names { \ BOOST_PP_SEQ_FOR_EACH_I( FC_REFLECT_MEMBER_NAME, TYPE, MEMBERS ) \ } } + #define FC_REFLECT_DERIVED_TEMPLATE( TEMPLATE_ARGS, TYPE, INHERITS, MEMBERS ) \ namespace fc { \ template struct get_typename { \ @@ -352,6 +353,28 @@ namespace member_names { \ BOOST_PP_SEQ_FOR_EACH_I( FC_REFLECT_TEMPLATE_MEMBER_NAME, (TEMPLATE_ARGS)(TYPE), MEMBERS ) \ } } +#define FC_REFLECT_DERIVED_NO_TYPENAME( TYPE, INHERITS, MEMBERS ) \ +namespace fc { \ +template<> struct reflector {\ + typedef TYPE type; \ + typedef std::true_type is_defined; \ + using native_members = \ + typename typelist::builder<>::type \ + BOOST_PP_SEQ_FOR_EACH_I( FC_CONCAT_MEMBER_REFLECTION, TYPE, MEMBERS ) ::finalize; \ + using inherited_members = \ + typename typelist::builder<>::type \ + BOOST_PP_SEQ_FOR_EACH( FC_CONCAT_BASE_MEMBER_REFLECTIONS, TYPE, INHERITS ) ::finalize; \ + using members = typename typelist::concat::type; \ + using base_classes = typename typelist::builder<>::type \ + BOOST_PP_SEQ_FOR_EACH( FC_CONCAT_TYPE, x, INHERITS ) ::finalize; \ + enum member_count_enum { \ + local_member_count = typelist::length(), \ + total_member_count = typelist::length() \ + }; \ + FC_REFLECT_DERIVED_IMPL_INLINE( TYPE, INHERITS, MEMBERS ) \ +}; \ +} // fc + /** * @def FC_REFLECT(TYPE,MEMBERS) * @brief Specializes fc::reflector for TYPE