QObject
一般に、派生クラスからの多重継承 (仮想多重継承であっても) は Qt ではサポートされていないことを理解しています。
仮想継承の場合でも、Qtクラス自体は仮想継承しないという理由を理解しています(私はそう思います) QObject
。たとえば、 と の両方から仮想的にクラスを派生させようとするQWidget
とQThread
、継承チェーンの無関係な場所に仮想継承が配置され、2 つのQObject
インスタンスが作成されます。
したがって、派生元の唯一の Qt クラスがQObject
それ自体である仮想継承を使用することは安全であり、Qt でサポートされていると思います。
私は持っている:
class Top : public QObject {};
class Left : public virtual Top {};
class Right : public virtual Top {};
class Bottom : public Left, public Right {}; // Is this safe, and supported by Qt?
のインスタンスはBottom
真に のインスタンスを 1 つしか持たないTop
(したがってのインスタンスを 1 つだけ持つ) ため、Qt での多重継承 (仮想QObject
多重継承であっても) を回避する論理的根拠はここでは当てはまらないようです。
それにもかかわらず、上記の構成により、Qt コンパイラの警告が発生しClass Bottom inherits from two QObject subclasses Left and Right. This is not supported!
ます。
私は正しいですか?この特定のシナリオで Qt コンパイラの警告を無視しても安全ですか? QObjectから直接仮想多重継承を含む上記の構造は、安全でQtでサポートされていますか?