代码拉取完成,页面将自动刷新
同步操作将从 wkun/libcobject 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#ifndef _COBJECT_H_
#define _COBJECT_H_
#define COBJECT_MAJOR_VERSION 1
#define COBJECT_MINOR_VERSION 0
#define COBJECT_MICRO_VERSION 0
/* 编程思想之一:尽可能不影响C编码风格基础上模拟面向对象
* 使用原则:
* 1,结构体第一个成员为cclass静态变量即声明为类
* 2,父类对象可为子类静态变量,也可为指针变量
* 3,类不能作为本类静态变量,可作为本类指针变量
* 4,子类只能重写父类虚函数,不能重写父类的父类的虚函数
* 5,建议所有类对象通过_ctor/_dtor或_new/_del作为构造/析构函数后缀
* 6,建议普通结构体通过_init/_clean或_alloc/_free作为初始化/销毁函数后缀
* */
#define _STR(s) #s // 可避免CCLASS_NAME传入s为宏不会被再次展开的情况
#define CCLASS_NAME(s) _STR(s)
#define CCLASS_SIZE(s) sizeof(s)
#define CCLASS_INFO(s) CCLASS_NAME(s), CCLASS_SIZE(s)
#define CVIRTUAL // 基类虚函数标记,提醒用无实际意义
#define CCLASS_INFO_NONE {NULL, 0}
#define COBJECT_NONE NULL
typedef void* cobject;
typedef void* cmethod;
// 运行时对象的类信息,参照c++的type_info
typedef struct {
char *name;
int size;
} cclass_info;
typedef struct {
unsigned char flag[4]; // 类对象标记,是否为对象的基本条件
cclass_info info; // 类信息
cobject *inherit; // 父类对象列表
int inherit_nr; // 父类对象数量
} cclass;
// 对象创建
cobject cobject_new(char* cclass_name, int cclass_size);
// 对象销毁
void cobject_del(cobject obj);
// 对象构造
void cobject_ctor(cobject obj, char* cclass_name, int cclass_size);
// 对象析构
void cobject_dtor(cobject obj);
// 设置对象所继承的父对象
void cobject_inherit(cobject obj, cobject parent);
// 设置对象所继承的父类方法的重写
#define cobject_override(obj, virf, override) (obj)->virf = (override)
// 取消对象所继承的父类方法的重写
#define cobject_unoverride(obj, virf) (obj)->virf = NULL
// 运行时对象的类信息,参照c++的typeid
cclass_info cobject_id(cobject obj);
// 是否当前类对象
int cobject_type(cobject obj, char* cclass_name);
// 获取当前类对象(obj为当前类对象或子类对象)
cobject cobject_self(cobject obj, char* cclass_name);
#endif
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。