Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- typedef struct Class
- {
- const struct Class* parent;
- void (*virtualPrint)(void*);
- } Class;
- typedef struct A
- {
- const Class* class;
- int a;
- } A;
- typedef struct B
- {
- const Class* class;
- A a;
- int b;
- } B;
- static const Class* getClass(void* this)
- {
- return *(Class**)this;
- }
- static void virtualPrintA(void* this)
- {
- A* a = this;
- printf("virtualPrintA: %d\n", a->a);
- }
- static void virtualPrintB(void* this)
- {
- B* b = this;
- getClass(&b->a)->virtualPrint(&b->a);
- printf("virtualPrintB: %d\n", b->b);
- }
- static const Class aClass = {.parent = NULL, .virtualPrint = virtualPrintA};
- static const Class bClass = {.parent = &aClass, .virtualPrint = virtualPrintB};
- int main()
- {
- A a = {.class = &aClass, .a = 1};
- B b = {.class = &bClass, .a = {.class = &aClass, .a = 2}, .b = 3};
- A* c = (A*)&b;
- getClass(&a)->virtualPrint(&a);
- getClass(&b)->virtualPrint(&b);
- getClass(c)->virtualPrint(c);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement