The closest you can get is the fairly common idiom:
typedef struct
{
// base members
} Base;
typedef struct
{
Base base;
// derived members
} Derived;
As Derived
starts with a copy of Base
, you can do this:
Base *b = (Base *)d;
Where d
is an instance of Derived
. So they are kind of polymorphic. But having virtual methods is another challenge - to do that, you'd need to have the equivalent of a vtable pointer in Base
, containing function pointers to functions that accept Base
as their first argument (which you could name this
).
By which point, you may as well use C++!
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…