#define CLASS(a) typedef strcut a a; \
struct a{
#define ENDCLASS(a) a##_FIELDS };
CLASS(Base)
#define Base_FIELDS\
int base_value;\
char *base_ptr
ENDCLASS(Base)
CLASS(Private)
#define Private_FIELDS Base_FIELDS
int private_value;\
char *private_ptr;
ENDCLASS(Private)
// example
int main(void)
{
Private temp;
temp.base_value = 1;
temp.private_value = 2;
return 0;
}
注: Private temp;展开如下:
typedef struct Private Private;
struct Private {
#define Private_FIELDS Base_FIELDS
int private_value;\
char *private_ptr;
Private_FIELDS };
进一步展开如下:
struct Private {
#define Private_FIELDS Base_FIELDS
int private_value;\
char *private_ptr;
int base_value;\
char *base_ptr };
如此,就继承了Base类中的变量信息。
细心的朋友会发现,这种定义方法的关键是两个宏 :
#define Private_FIELDS Base_FIELDS 以及ENDCLASS(a)