用C結構體來實作面向對象程式設計,ti xDAIS标準算法就這麼搞的。
測試代碼如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Alg_Obj{
struct Alg_Fxn* fxns;
}Alg_Obj;
typedef Alg_Obj *Alg_Handle;
typedef struct Alg_Fxn{
void (*process)(Alg_Handle handle);
void (*control)(Alg_Handle handle);
}Alg_Fxn;
void Alg_process(Alg_Handle handle)
{
handle->fxns->process(handle);
printf("in Alg_process.. \n");
}
void Alg_control(Alg_Handle handle)
{
handle->fxns->control(handle);
printf("in Alg_control.. \n");
}
struct triangle{
Alg_Handle handle;
int a;
int b;
int c;
};
void tri_process(Alg_Handle handle)
{
struct triangle *t = (struct triangle*)handle;
int a = t->a;
int b = t->b;
int c = t->c;
printf(" [in tri_process] sum=%d\n",a+b+c);
}
void tri_control(Alg_Handle handle)
{
struct triangle *t = (struct triangle*)handle;
int a = t->a;
int b = t->b;
int c = t->c;
printf(" [in tri_control] sum=%d\n",(a+b+c)*2);
}
Alg_Fxn gfxns = {
tri_process,
tri_control,
};
int main()
{
struct triangle *ret = (struct triangle*)malloc(sizeof(struct triangle));
ret->handle->fxns=&gfxns;
ret->a = 2;
ret->b = 3;
ret->c = 4;
Alg_Handle Handle= (Alg_Handle)ret;
//第一種調用,注意結果
gfxns.process(Handle);
gfxns.control(Handle);
printf("\n**********************************\n");
//第二種調用,注意結果
Alg_process(Handle);
Alg_control(Handle);
free(Handle);
return 0;
}
/*
[[email protected] TestCode]# ./a.out
[in tri_process] sum=9
[in tri_control] sum=18
**********************************
[in tri_process] sum=9
in Alg_process..
[in tri_control] sum=18
in Alg_control..
*/