Добавляем немного виртуальности в C

Ну вот нельзя просто так добавить, и все тут!

Мне тут пришлось вспомнить, как же все таки надо писать на С, хотя работаю С++ программистом. И мне так не хватало классов и методов, что я стал думать, как можно приблизить С к С++. Зачем? Просто так, мозги размять.
Основное пожелание было следующим: хочется, чтобы в С работал примерно такой код
void print_name( Iface* ptr )
{
    ptr->print_name();
}

void main()
{
    A a;
    B b;

    print_name( &a; );    // выдаст "This is A object"
    print_name( &b; );    // выдаст "This is B object"
}

По сути, A и В наследуют один и тот же (а может и несколько) интерфейс(ов). При этом можно на этих объектах вызывать виртуальные методы, действующие в зависимости от того, какой указатель был подан.

Кому интересно, что получилось в итоге (а в каком-то виде задача была решена) и кому интересно, как примерно в С++ реализуются виртуальные методы, прошу под кат.
Follow the white rabbit

© Habrahabr.ru