воскресенье, 12 декабря 2010 г.

Наследование в C!

Как реализовать наследование в C? Скажете, там и классов-то нет!

Разбираюсь с GTK+ - кроссплатформенным набором инструментов для создания GUI. Там достаточно часто встречается код подобного вида

GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect( GTK_OBJECT(window), "delete_event", GTK_SIGNAL_FUNC(delete_event), NULL );

где GTK_OBJECT - фактически макрос приведения указателя на структуру GtkWidget к указателю на структуру GtkObject.

Так вот. Идея заключается в том, что если GtkWidget имеет вид

struct GtkWidget
{
  GtkObject innerObject;
};

то такое приведение действительно будет работать в C, а это значит, что одиночное наследование реализуется достаточно просто.

P.S. Следует учитывать, что в самом GTK макрос кроме непосредственно приведения указателей выполняет еще и проверку типов, так что будьте внимательны!

Комментариев нет:

Отправить комментарий