簡體   English   中英

C ++中QObject多重繼承和策略/特征設計的問題

[英]Problems with QObject multiple inheritance and policy/traits design in C++

我在業余時間正在構建一個相當大的插件驅動的應用程序,並且遇到了顯示停止設計缺陷的情況。 我的應用程序使用基於策略/特征的設計,但是因為我使用Qt,所以它僅通過MI(而不是模板和MI)完成。 這些類中的一些是純虛擬的,而某些類在最終用戶永遠不應接觸的幕后執行相當關鍵的功能。

我的問題是這些類中的某些類需要信號/插槽,因此是從QObject派生的,我可以從該對象繼承而來幾乎沒有問題。 但是,我遇到的問題是,當我想從Qt類派生然后用我的一個或多個特征擴展它時,例如:

class Sy_abstractGLViewport : public QGLWidget, public Sy_saveable, public Sy_abstractObject
{
    ...
}

這里的QGLWidget是從QObject派生的,但實際上不是從QObject派生的,從而引起歧義問題。

我考慮過一種橋接模式,在該模式中,我制作了Sy_saveable純虛擬對象,然后從其中導出包含實際實現的Sy_saveable_imp 然后通過聚合將其用於我的Sy_abstractGLViewport

在我看來,這不是很專業,因為該應用程序是基於插件的,對於我將來的插件編寫者來說,將所有接口方法“連接”到聚合實例上有點像PITA。 我什至無法通過宏將其自動化,因為最終用戶可能想覆蓋方法。

有沒有人可以解決這個問題的模式? 還是不需要MI但給我同樣靈活性的模式? 這是我個人的業余愛好項目,我不介意進行大量重構-我想做正確的事

您不能從繼承QObject的多重句柄繼承。

嘗試使用合成而不是繼承。 請參見組成而不是繼承

您也可以嘗試使用Q3Signal類。 盡管根據QT doc,它屬於舊的QT3:

Q3Signal類可用於為不繼承QObject的類發送信號。

暫無
暫無

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

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