Witam
Czy poniższa implementacja vtable w C jest wyczerpująca? Bazowałem na 4 różnych artykułach z google ale nie wiem czy do końca wyczerpany jest temat. Głównie chodzi mi o to czy na końcu w funkcji main nie da się czegoś prostszego zaiplementować, bo mam np.:

    A.vptr->metoda(&A);
    B.base.vptr->metoda((Klasa*)&B);

a może coś da się dodać do implementacji vtable, że te wywołania będą w stylu:

    A.metoda(); //metoda z klasy bazowej
    B.metoda(); //metoda z klasy pochodnej

Tutaj cały kod:

//Base class
struct vtableKlasa;

typedef struct Klasa
{
    int a,b,c;
    const vtableKlasa* vptr;
} Klasa;

void KlasaMetoda(Klasa* const my)
{
    my->a = 10;
    my->b = 11;
    my->c = 12;   
    cout << "Method from base class" << endl;
}

typedef struct vtableKlasa
{
    void(*metoda)(struct Klasa* const my);
} vtableKlasa;

static const vtableKlasa vTableFunc =
{
    KlasaMetoda
};

void KlasaCtor(Klasa* const my)
{
    my->a = 0; 
    my->b = 0;
    my->c = 0;
    my->vptr = &vTableFunc;
    cout << std::hex << "Address of base class 0x" << my << endl;
}


//inherited class
struct vtableKlasaPoch;

typedef struct KlasaPoch
{
    Klasa base;
    int d;
} KlasaPoch;

void KlasaPochMetoda(struct Klasa* const my)
{
    my->a = 10;
    my->b = 11;
    my->c = 12;
    ((KlasaPoch*)my)->d = 9;
    cout << "Method from inherited class" << endl;
}

static const vtableKlasa vTableFuncPoch = { KlasaPochMetoda };

void KlasaPochCtor(KlasaPoch* const my)
{
    KlasaCtor(&my->base);
    my->d = 0;
    my->base.vptr = &vTableFuncPoch;
    cout << std::hex << "Address of inherited class 0x" << my << endl;
}

void main()
{
    cout << "CTest(): " << endl;
    Klasa A;
    KlasaCtor(&A);
    KlasaPoch B;
    KlasaPochCtor(&B);
    A.vptr->metoda(&A);
    B.base.vptr->metoda((Klasa*)&B);

   //Examples of usage
    Klasa* C = (Klasa*)&B;
    C->vptr->metoda(C);
    KlasaPoch* D = &B;
    D->base.vptr->metoda((Klasa*)D);
}

Temat to pod rozmowę kwalifikacyjną jak dadzą ci pytanie byś zaimplementował w C vtable, to się zastanawiam czy to powyżej wystarczy czy ktoś z rekrutujących poprosi o to by coś dodać aby wywołania były w stylu:

    A.metoda(); //metoda z klasy bazowej
    B.metoda(); //metoda z klasy pochodnej