- 论坛徽章:
- 2
|
- typedef struct X_ {
- void (*f1)(struct X_** self, int);
- int (*f2)(struct X_** self, double);
- } X;
- void X_f1(X** self, int i) {
- (*self)->f1(self, i);
- }
- int X_f2(X** self, double d) {
- return (*sefl)->f2(self, d);
- }
- typedef struct {
- X* vptr;
- .. data
- } Y;
- void Y_f1(X** self, int i) {
- Y* y = (Y*)( (char*)self - offsetof(Y,vptr) );
- // work with y->data and i
- }
- int Y_f2(X** self, double d) { ... }
- X Y_vtbl = { Y_f1, Y_f2 };
- void Y_ctor(Y* y) {
- y->vptr = &Y_vtbl;
- // init y->data
- }
- Y* y = malloc( sizoef *y );
- Y_ctor(y);
- X** i = &y->vptr;
- X_f1(i);
- X_f2(i);
复制代码 确实是相当嘀麻烦……
这还好, 能搞出来……
template怎么搞啊…… |
|