C 面向对象程序设计
运行时动态绑定一直以来都是面向对象的优势,比如C++\JAVA等面向对象编程语言都有这种特性。
但是,其实C语言也可以有这样的优势。在C语言要实现这种方式,需要利用结构体、以及结构体的操作函数表。
然后再利用工厂模式、或者桥模式,在程序运行时动态绑定。
例子如下:
typedef struct person person_t;
typedef struct person_opt person_opt_t;
struct person
{
void *data;
person_opt_t *opt;
};
struct person_opt
{
void (*say)(person_t *p);
void (*walk)(person_t *p);
};
struct person_opt teacher_opt;
struct person_opt student_opt;
person *create_person(int type)
{
person *p = (person *)malloc(sizeof(person));
if(type == 0)
{
p->opt = &teacher_opt;
}else
{
p->opt = &student_opt;
}
}