gtk4 中 GTK_IS_ROOT 的实现在哪里?

Where is the implementation of GTK_IS_ROOT in gtk4?

那个函数的实现在哪里?

是宏函数

我搜索了源代码,没找到

GTK_IS_ROOT()G_DECLARE_INTERFACE (GtkRoot, gtk_root, GTK, ROOT, GtkWidget) at https://gitlab.gnome.org/GNOME/gtk/-/blob/main/gtk/gtkroot.h#L35 宏定义。这是一个 GObject 宏,GTK 广泛使用 GObject。

基本上:在编写 GObject classes 或接口时,您需要编写相当多的样板来实现继承权,理想情况下以有助于 ABI 稳定性的方式。 GObject 提供的宏使您更容易:G_DECLARE_FINAL_TYPE(), G_DECLARE_DERIVABLE_TYPE() and G_DECLARE_INTERFACE() 是分别声明最终 class(不能被子classed)、可派生的 class,和一个接口。

您经常想用运行时继承做的事情之一是执行与特定参数或变量类型相关的特定检查。上述宏通过生成一些额外的宏来实现此类功能来帮助解决这个问题。

给定命名空间 Xxx(例如 Gtk)和类型名称 Yyy(例如 Root),它将提供一个 XXX_IS_YYY(var) 宏检查给定变量 var 是否真的是 class 的实例(即它实现了您可能知道的其他语言的 instanceof() 运算符)