Как в glib, в GStreamer имя "parent_class" используется для определения первого поля структуры нового класса, например:
https://gitlab.gnome.org/GNOME/glib/-/blob/main/gobject/gtype.h
( Read more... )
Update: Совсем забыл сказать, для чего это всё делается (define ..._parent_class parent_class), чтобы не писать длинно:
Но иногда в исходнике других упоминаний parent_class нет вообще, и это ещё больше меня расстраивает.
Зачем?!
"Один ответ на это есть!" Boilerplate! В смысле, copy-past technology!
Update 2: Мло того, есть ещё и в обратную сторону:
https://mpd.livejournal.com/190287.html
struct _GTypeModuleClass { GObjectClass parent_class; ...Для нового элемента в GStreamer используется макро G_DEFINE_TYPE (которое раскрывается в DEFINE_TYPE_EXTENDED) из GObject:
https://gitlab.gnome.org/GNOME/glib/-/blob/main/gobject/gtype.h
( Read more... )
Update: Совсем забыл сказать, для чего это всё делается (define ..._parent_class parent_class), чтобы не писать длинно:
G_OBJECT_CLASS (some_class_parent_class)->finalize (object);а коратко
G_OBJECT_CLASS (parent_class)->finalize (object);Всё!
Но иногда в исходнике других упоминаний parent_class нет вообще, и это ещё больше меня расстраивает.
Зачем?!
"Один ответ на это есть!" Boilerplate! В смысле, copy-past technology!
Update 2: Мло того, есть ещё и в обратную сторону:
> git grep -n -H -E "^ *# *define +parent_class +.*_parent_class *$" | wc 146 438 16605 > git grep -n -H -E "^ *# *define +.*_parent_class +parent_class *$" | wc 748 2244 83736
https://mpd.livejournal.com/190287.html