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 的高度动态特性,这不太可能。
在 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 的高度动态特性,这不太可能。