前言
最近搞 Unix编程 & PHP扩展开发 搞得不亦乐乎,忽然,凭我低下的C语言掌控能力,忽然看到一个不能理解的片段(来自Swoole):
struct _swReactor
{
    /*
         .... 省略100行
        */
    int (*add)(swReactor *, int fd, int fdtype);
    int (*set)(swReactor *, int fd, int fdtype);
    int (*del)(swReactor *, int fd);
    int (*wait)(swReactor *, struct timeval *);
    void (*free)(swReactor *);
    int (*setHandle)(swReactor *, int fdtype, swReactor_handle);
    swDefer_callback *defer_callback_list;
    void (*onTimeout)(swReactor *);
    void (*onFinish)(swReactor *);
    void (*enable_accept)(swReactor *);
    int (*write)(swReactor *, int, void *, int);
    int (*close)(swReactor *, int);
    int (*defer)(swReactor *, swCallback, void *);
};
嗯嗯嗯嗯? 为何在 struct 里面有函数指针?作者想干什么? 哦,继续往下看代码,发现,原来是在用C写OOP。
C语言下的面向对象编程
所以,参考了各方教程,写了个小demo:
#include <stdio.h>
#include <stdlib.h>
typedef struct people People;
struct people{
    int age;
    int (*get_age) (People *);
};
int get_age(People *p) {
    return p->age;
}
People base = {
    0,
    get_age
};
People* newPeople(int age)
{
    People *new_people = (People *)malloc(sizeof(People));
    new_people = &base;
    new_people->age = age;
    return new_people;
}
int main() {
    char string[100];
    People *people1 = newPeople(20);
    printf("Get age %d", people1->get_age(people2));
    return 0;
}