Supponiamo di avere la solita classe astratta class Animal
e la class Dog : public Animal
class Cat : public Animal
che la rende una classe concreta da cui è possibile creare un'istanza di un oggetto. Supponiamo inoltre di avere una funzione foo(Animal a)
, prendendo sia gatti che cani come oggetti. All'inizio, C++ si compilava in C e creava un vTable
mantenendo gli oggetti lì.Quali erano gli idiomi C per il polimorfismo e l'ereditarietà prima che i concetti fossero resi espliciti?
Ma un mio studente mi ha chiesto questa domanda: prima che questi concetti erano soliti discorsi tra i programmatori, come hanno fatto in realtà fanno nel loro giorno per giorno la codifica in C? Qual è stato (è?) Il modo idiomatico di programmare questi concetti in C?
Ho setacciato il kernel di Linux e altri progetti OSS, ma non sono stato in grado di trovare uno schema chiaro: a volte sono i sindacati (per le diverse strutture), a volte i puntatori di funzione, ecc. Ma vorrei come una risposta diretta da parte di persone esperte nel settore che hanno fatto e hanno molta esperienza con C.
In una frase: qual è la C idiomatica per ereditarietà e polimorfismo?
1) unioni intelligenti 2) puntatori a funzione come membri struct/sindacali. Per un esempio, guarda come Linux gestisce i driver di dispositivo (blocco). – wildplasser
Non credo ci fosse un modo idiomatico per farlo, AFAIK era uno dei punti di forza del C++. Anche questo articolo viene in mente http://www.yosefk.com/blog/oo-c-is-passable.html (su emulazione OO in C) –
@wildplasser: Grazie. I "sindacati intelligenti" sono diversi dai "sindacati"? Non ho familiarità con il concetto, dato che ci sono "puntatori" e poi ci sono "puntatori intelligenti". –