我有一個純虛類A,在其上我做模擬qobject_cast失敗
Q_DECLARE_INTERFACE(A, "org.something.A")
,我有作爲B類,其繼承A和QObject的實現的插件,具有作爲接口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的元相關方法可能是可行的,但我不知道是哪一個。
我希望你明白我想要做什麼(雖然它不是很清楚)。也許有完全不同的方式來做到這一點?
感謝
我懷疑有什麼辦法讓qobject_cast在這裏做你想做的。相反,爲什麼不只是定義一個接口,並且可以返回你想要在運行時控制的接口呢? – 2012-02-27 18:07:43