xxxxxxxxxx
import std;
void main()
{
Renderer renderer;
auto chip = new Chip();
// Test Draw
// 1. Init
chip.Draw( renderer );
// 2. Hovered
chip.to!Chip_Hovered();
chip.Draw( renderer );
// 3. Init
chip.to!Chip_Init();
chip.Draw( renderer );
// 4. Hovered
chip.to!Chip_Hovered();
chip.Draw( renderer );
}
abstract
class O
{
void Draw( Renderer renderer ) {};
void to(CLS)()
{
// if (same fields && same interfaces && same instance size)
this.__vptr =
cast(immutable(void*)*)typeid(CLS).vtbl.ptr;
}
}
alias Chip_Init = Chip;
class Chip : O
{
override
void Draw( Renderer renderer )
{
writeln( "Chip.Draw" );
}
}
class Chip_Hovered : Chip
{
override
void Draw( Renderer renderer )
{
writeln( "Chip_Hovered.Draw" );
}
}
alias Renderer = void*;