簡體   English   中英

模擬qobject_cast失敗

[英]Simulate qobject_cast failure

我有一個純虛擬課程A,

Q_DECLARE_INTERFACE(A, "org.something.A")

我有一個實現為類B的插件,該插件繼承了A和QObject,具有作為接口A並實現A的所有純虛方法

class B : public QObject, public A
{
    Q_OBJECT
    Q_INTERFACES(A)

    public:
        void someMethod();
}

並在cpp中:

Q_EXPORT_PLUGIN2(A, A)

這很好。 實際上,有許多不同的接口,並且核心應用程序(我尚未編寫並且無法對其進行大修改)調用

qobject_cast<A *>(bPointer);

並檢查結果以了解某個插件是否實現了接口。

所有這些都很好。

但是,我想在B類中在運行時確定是否要實現某個接口。

這些方法將始終實現,但我有時希望使qobject_cast失敗,但在運行時確定(對於同一接口,單個實例將始終失敗或成功)。

這聽起來可能很奇怪,但是這樣做的原因是我想添加Python(或其他語言)插件。 他們將有一個C ++包裝器。 他們的python源代碼將使用rcc文件存儲。 所有python插件的c ++代碼都應該相同。

C ++包裝器將調用python方法,確定哪些接口由python代碼實現,如果python代碼未實現接口,則使qobject_cast失敗。 C ++包裝器類將實現所有接口方法並將調用轉發給python,但只有真正成功轉換的方法才被調用。

通過重新實現QObject的meta相關方法可能是可行的,但我不知道哪種方法。

我希望您理解我的嘗試(盡管不是很清楚)。 也許有完全不同的方式來做到這一點?

謝謝

您不能僅使用公共 Qt API更改qobject_cast行為。 另請注意,每個插件庫只能有一個插件對象實例。

一個解決方案將是一個插件,作為工廠工作並按要求返回接口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM