我使用Vala的gobject-introspection-1.0庫來動態加載吉爾模塊。因爲我需要調用具有固定名稱的初始化函數,所以我從Repository.find_by_name中檢索BaseInfo對象。如何在Vala中使用緊湊型?
現在,我想調用GI.CallableInfo.invoke這個函數,它需要一個GI.CallableInfo對象。
幸運的是,GI.CallableInfo繼承自GI.BaseInfo,我檢索的實例可能是GI.CallableInfo。因此,我試圖以動態或靜態地將它轉換:
GI.CallableInfo myCallableInfo = myBaseInfo as GI.CallableInfo;
GI.CallableInfo myCallableInfo = (GI.CallableInfo) myBaseInfo;
GI.CallableInfo myCallableInfo = (myBaseInfo is GI.CallableInfo)
? (GI.CallableInfo) myBaseInfo : null;
第一個結果編譯錯誤:
error: Operation not supported for this type
第二個在運行時斷言失敗,myCallableInfo被空:
g_boxed_copy: assertion 'G_TYPE_IS_BOXED (boxed_type)' failed
最後一個給出了一個編譯錯誤,這導致了我的小型路徑:
type check expressions not supported for compact classes, structs, and enums
如何成功將GI.BaseInfo轉換爲GI.CallableInfo?