かなり大きなプラグイン駆動型のアプリケーションを余計な時間に作成しています。私のアプリはポリシー/特性ベースのデザインを使用していますが、私はQtを使用しているため、テンプレートとMIではなくMIを介して行われます。これらのクラスのいくつかは純粋な仮想であり、エンドユーザーが決して触れるべきではないフードの下でかなり重要な機能を実行するものもあります。C++でのQObject多重継承とポリシー/特性の問題
私の問題は、これらのクラスのいくつかは信号/スロットを必要とし、したがってQObjectから派生していますが、問題はほとんどありません。
class Sy_abstractGLViewport : public QGLWidget, public Sy_saveable, public Sy_abstractObject
{
...
}
ここでQGLWidgetは、曖昧さの問題を引き起こし、事実上はQObjectから派生しますが、されていません。しかし、私が持っている問題は、私はQtのクラスから派生して、私の特性、例えばの一つ以上でそれを拡張したいときです。
私はブリッジパターンを考えました。たとえば、Sy_saveable
という純粋な仮想を作成し、実際の実装が含まれているSy_saveable_imp
を得ています。それから私のSy_abstractGLViewport
のためにそれを集約を使って使用してください。
これは私にとって、アプリがプラグインベースであるため、プロフェッショナルではないように思えます。将来のプラグイン作家が集約されたインスタンスへのすべてのインタフェースメソッドを「フックアップ」するためのちょっとしたPITAです。エンドユーザーがメソッドをオーバーライドしたいので、マクロを使って自動化することさえできません。
誰もがこの問題を解決するパターンを持っていますか?またはMIを必要としないが、私に同じ柔軟性を与えるパターン?この私の個人的な趣味のプロジェクトは、私は多くのリファクタリングをしても構いません - 私はそれをしたい右。
これを行うかどうかはわかりませんが、QObjectから仮想的に継承しません。 Qt 4.7以前では動作しますが、Qt 4.8では動作しない可能性があります。 https://bugreports.qt.nokia.com/browse/QTBUG-19717 – masebase