GObject:如何在编译时检查未初始化的纯虚拟?

GObject: how to check non-initialized pure virtual at compile time?

在 GObject 世界中有什么方法可以在编译时检测未初始化的纯虚函数吗?

我想调用纯虚方法而不先检查它。

/* pure_virtual_method must be non NULL */
base->pure_virtual_method();

但如果不初始化,它只是SegV。

我不相信有一种方法可以在编译时完美地检查它,因为(例如)你的代码可以链接到另一个库,一个子class 派生自你的 class 定义了虚方法,并且在 subclass.

中将虚方法的实现设置为 NULL(显式地,或通过不初始化它隐式地)

传统的处理方式是在运行时: g_assert (base->pure_virtual_method != NULL); base->pure_virtual_method ();

一些静态分析工具可能能够在编译时检查此 g_assert() 约束,尽管考虑到 GObject 中 subclassing 的高度动态特性,这不太可能。