enable reflecting empty structs
This commit is contained in:
parent
4736e8e666
commit
9173154160
1 changed files with 8 additions and 1 deletions
|
|
@ -90,6 +90,9 @@ void throw_bad_enum_cast( const char* k, const char* e );
|
||||||
#define FC_REFLECT_BASE_MEMBER_COUNT( r, OP, elem ) \
|
#define FC_REFLECT_BASE_MEMBER_COUNT( r, OP, elem ) \
|
||||||
OP fc::reflector<elem>::total_member_count
|
OP fc::reflector<elem>::total_member_count
|
||||||
|
|
||||||
|
#define FC_REFLECT_MEMBER_COUNT( r, OP, elem ) \
|
||||||
|
OP 1
|
||||||
|
|
||||||
#define FC_REFLECT_DERIVED_IMPL_INLINE( TYPE, INHERITS, MEMBERS ) \
|
#define FC_REFLECT_DERIVED_IMPL_INLINE( TYPE, INHERITS, MEMBERS ) \
|
||||||
template<typename Visitor>\
|
template<typename Visitor>\
|
||||||
static inline void visit( const Visitor& v ) { \
|
static inline void visit( const Visitor& v ) { \
|
||||||
|
|
@ -160,12 +163,13 @@ template<> struct reflector<TYPE> {\
|
||||||
typedef fc::true_type is_defined; \
|
typedef fc::true_type is_defined; \
|
||||||
typedef fc::false_type is_enum; \
|
typedef fc::false_type is_enum; \
|
||||||
enum member_count_enum { \
|
enum member_count_enum { \
|
||||||
local_member_count = BOOST_PP_SEQ_SIZE(MEMBERS), \
|
local_member_count = 0 BOOST_PP_SEQ_FOR_EACH( FC_REFLECT_MEMBER_COUNT, +, MEMBERS ),\
|
||||||
total_member_count = local_member_count BOOST_PP_SEQ_FOR_EACH( FC_REFLECT_BASE_MEMBER_COUNT, +, INHERITS )\
|
total_member_count = local_member_count BOOST_PP_SEQ_FOR_EACH( FC_REFLECT_BASE_MEMBER_COUNT, +, INHERITS )\
|
||||||
}; \
|
}; \
|
||||||
FC_REFLECT_DERIVED_IMPL_INLINE( TYPE, INHERITS, MEMBERS ) \
|
FC_REFLECT_DERIVED_IMPL_INLINE( TYPE, INHERITS, MEMBERS ) \
|
||||||
}; }
|
}; }
|
||||||
|
|
||||||
|
//BOOST_PP_SEQ_SIZE(MEMBERS),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @def FC_REFLECT(TYPE,MEMBERS)
|
* @def FC_REFLECT(TYPE,MEMBERS)
|
||||||
|
|
@ -178,6 +182,9 @@ template<> struct reflector<TYPE> {\
|
||||||
#define FC_REFLECT( TYPE, MEMBERS ) \
|
#define FC_REFLECT( TYPE, MEMBERS ) \
|
||||||
FC_REFLECT_DERIVED( TYPE, BOOST_PP_SEQ_NIL, MEMBERS )
|
FC_REFLECT_DERIVED( TYPE, BOOST_PP_SEQ_NIL, MEMBERS )
|
||||||
|
|
||||||
|
#define FC_REFLECT_EMPTY( TYPE ) \
|
||||||
|
FC_REFLECT_DERIVED( TYPE, BOOST_PP_SEQ_NIL, BOOST_PP_SEQ_NIL )
|
||||||
|
|
||||||
#define FC_REFLECT_TYPENAME( TYPE ) \
|
#define FC_REFLECT_TYPENAME( TYPE ) \
|
||||||
namespace fc { \
|
namespace fc { \
|
||||||
template<> struct get_typename<TYPE> { static const char* name() { return BOOST_PP_STRINGIZE(TYPE); } }; \
|
template<> struct get_typename<TYPE> { static const char* name() { return BOOST_PP_STRINGIZE(TYPE); } }; \
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue