在编译时,Gobject World中是否有任何方法可以检测非初始化的纯虚拟功能?
我想在不先检查的情况下调用纯虚拟方法。
/* pure_virtual_method must be non NULL */
base->pure_virtual_method();
但是,如果不初始化,它将只有segv。
我不相信有一种在编译时间完美检查的方法,因为(例如)您的代码可以链接到另一个库,这是从您的类中派生的一个子类虚拟方法,以及在子类中将虚拟方法设置为 NULL
(明确或隐式通过不初始化)的实现。
传统的处理方式是在运行时:
g_assert (base->pure_virtual_method != NULL);
base->pure_virtual_method ();
一些静态分析工具可能能够在编译时检查此g_assert()
约束,尽管给定gobject中的子分类的高度动态性质,但不太可能。