1

私はクラスAを持っていますが、これは外部クラスであり、自分の管理下にはありませんが、その仕様を設計することはできます。

私のコードでは、いくつかのプロパティとメソッドを静的にAにアタッチしたいと思います。Aから継承して新しい機能をアタッチすることができます。しかし、Aの正確な仕様がわからないため、派生クラスinternalAにAのコンストラクターを提供することはできません。

デコレータパターンを使用することもできますが、ビルド時にデコレーションしたいので少しやり過ぎのようです。

それをうまく解決するための提案はありますか?

4

2 に答える 2

1

完全な転送である可能性があり、varadic テンプレートが役立ちます。

#include <utility>
#include "A.h"

class B: public A
{
public:
    template<class... TT>
    B(TT&&... tt) :A(std::forward<TT>(tt)...) {}

    B(const B&)=default;
    B(B&&)=default;

    //whatever other decoration
};

構成を好む場合は、パターンは同じように機能します。単に A がメンバーであり、ベースではありません。

于 2012-07-25T07:52:09.803 に答える
0

externalA への参照で十分だと思います。

template <typename A>
class InternalA {
    A &externalA;
    int property1;
    std::string property2;
    //...
public:
    InternalA (A &extA, int prop1, std::string prop2 /*...*/);
    // accessors to properties and to externalA...
};

しかし、私はあなたの質問を誤解したかもしれません。

于 2012-07-25T07:44:14.307 に答える