0
GObject世界中有沒有什麼方法可以在編譯時檢測未初始化的純虛函數?GObject:如何在編譯時檢查非初始化的純虛擬?
我想調用一個純粹的虛擬方法,而不先檢查它。
/* pure_virtual_method must be non NULL */
base->pure_virtual_method();
但是,如果它沒有初始化,它將只是SegV。
GObject世界中有沒有什麼方法可以在編譯時檢測未初始化的純虛函數?GObject:如何在編譯時檢查非初始化的純虛擬?
我想調用一個純粹的虛擬方法,而不先檢查它。
/* 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,那是不可能的。