3 回答
TA贡献1875条经验 获得超5个赞
第一个C ++编译器(“C with classes”)实际上会生成C代码,所以这绝对可行。
基本上,你的基类是一个结构; 派生结构必须在第一个位置包含基本结构,因此指向“derived”结构的指针也将是指向基本结构的有效指针。
typedef struct {
data member_x;
} base;
typedef struct {
struct base;
data member_y;
} derived;
void function_on_base(struct base * a); // here I can pass both pointers to derived and to base
void function_on_derived(struct derived * b); // here I must pass a pointer to the derived class
这些函数可以作为函数指针的结构的一部分,因此像p-> call(p)这样的语法变得可能,但你仍然必须显式地将指向结构的指针传递给函数本身。
TA贡献1804条经验 获得超2个赞
C ++离C不远。
类是具有指向名为VTable的函数指针表的隐藏指针的结构。Vtable本身是静态的。当类型指向具有相同结构的Vtables但指针指向其他实现时,您将获得多态性。
建议将调用逻辑封装在以struct为参数的函数中,以避免代码混乱。
您还应该在函数中封装结构实例化和初始化(这相当于C ++构造函数)和删除(C ++中的析构函数)。无论如何这些都是很好的做法。
typedef struct{ int (*SomeFunction)(TheClass* this, int i); void (*OtherFunction)(TheClass* this, char* c);} VTable;typedef struct{ VTable* pVTable; int member;} TheClass;
要调用方法:
int CallSomeFunction(TheClass* this, int i){ (this->pVTable->SomeFunction)(this, i);}
- 3 回答
- 0 关注
- 571 浏览
添加回答
举报