- 论坛徽章:
- 0
|
用数组+指针+半面向对象(C)或 集合+指针+CLASS(C++)。
具体可以参考GTK+的代码,这里举一个简单的例子:
- 1 #include <stdio.h>
- 2 #include <stdlib.h>
- 3 enum{
- 4 STRUCT_S1,
- 5 STRUCT_S2
- 6 };
- 7 struct base{
- 8 const int type;
- 9 };
- 10 struct s1{
- 11 const int type;//必须位于第一个。
- 12 int abc;
- 13 int def;
- 14 };
- 15 struct s2{
- 16 const int type;//必须位于第一个。
- 17 long jsk;
- 18 char abcde[10];
- 19 };
- 20 int main()
- 21 {
- 22 void * a[10]={0};
- 23 struct s1 b={STRUCT_S1, 1, 2};
- 24 struct s2 c={STRUCT_S2, 111, "123"};
- 25 a[0] = &b;
- 26 a[1] = &c;
- 27 int i;
- 28 for(i=0; i<10; i++)
- 29 {
- 30 struct base * base;
- 31 if(base = a[i])
- 32 {
- 33 switch(base->type){
- 34 case STRUCT_S1:
- 35 {
- 36 struct s1 *p = a[i];
- 37 printf("%d %d\n", p->abc, p->def);
- 38 }
- 39 break;
- 40 case STRUCT_S2:
- 41 {
- 42 struct s2 *p = a[i];
- 43 printf("%ld %s\n", p->jsk, p->abcde);
- 44 }
- 45 break;
- 46 }
- 47 }
- 48 }
- 49 return 0;
- 50 }
复制代码 |
|