3

vectorclass のオブジェクトを含む大規模なデータ構造、たとえば huge があると想像してくださいInitialFunctionality。C++ の場合:

class InitialFunctionality
{
 public:
 void iCanDoThis();
}

hugeVector vector<InitialFunctionality>; // <- lots of elements inside! :)

私の目標は、可能な限りパフォーマンスへの影響を最小限に抑えてオブジェクトの機能を動的に拡張することです。InitialFunctionalityhugeVector

class ExtraFunctionality: public InitialFunctionality
{
 public:
 int iOfferThisToo;
}

よく知られているDecorator パターンは、構造化されていないオブジェクトに最適です。これを使用して、クラスからオブジェクトの機能を動的に拡張し、InitialFunctionality後でそれらを喜んで渡すことができます。

hugeVectorしかし、順序を変更せずにパフォーマンスへの影響を最小限に抑えてオブジェクトを拡張するにはどうすればよいでしょうか? たとえば、ベクターの複製は、そのサイズのために実行できません。

元のオブジェクトへの参照を保持し、含まれているオブジェクトを必要に応じて (つまり、適応されたベクトル要素がアクセスされると) 遅延変換する、ベクトルにある種のアダプターを使用することを考えていました。hugeVectorただし、任意のメソッドで必要な変換自体 (つまり、初期化) とは別にiOfferThisToo、オブジェクトが既に変換されているかどうかを確認するためにキャッシュを保持する必要があります。このようなキャッシュは非常に高価になる可能性があります。

4

1 に答える 1

-1

余分なメンバーを追加していない場合は、次のようなことができるはずです:

class myInternalFunctionality : public InternalFunctionality {
public:
    //new features
    void ICanDoThis();

private:
    // disable all ctors
};

次に、ベクトル内の InternalFunctionality へのポインターを再キャストします。

myInternalFunctionality* myInternalPtr = &hugeVector[i];
myInternalPtr->ICanDoThis();

あなたがそうなので、私はあなたがいくつかの問題を抱えていると思います。

于 2013-03-03T13:48:54.423 に答える