[C] “类”的实现

#define _TO_STRUCT_NAME(name) struct s_##name

// 用于定义类与实例化对象

#define CLASS_START_DEFINE(name)	_TO_STRUCT_NAME(name)
#define CLASS_TYPE(type)		_TO_STRUCT_NAME(type)* // 用于表示自身类型
#define CLASS_END_DEFINE(type)		; typedef CLASS_TYPE(type) type;
#define CLASS_NEW(type)			((type) malloc(sizeof(_TO_STRUCT_NAME(type)))) // 这里也可以用calloc

// 简化写法

#define START   CLASS_START_DEFINE
#define TYPE    CLASS_TYPE
#define END     CLASS_END_DEFINE
#define NEW     CLASS_NEW

使用例

START(Person) {
	int age;
	TYPE(Person) parent;
} END(Person)

void sayAge(Person THIS) {
	printf("age: %d\n", THIS->age);
}

int main(void) {
	Person t = NEW(Person);
	t->age = 24;
	t->parent = NEW(Person);
	sayAge(t);// age: 24
	sayAge(t->parent);// age: 某个随机数
	return 0;
}

发表评论