Разбираюсь с 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 макрос кроме непосредственно приведения указателей выполняет еще и проверку типов, так что будьте внимательны!
Комментариев нет:
Отправить комментарий