vector
class のオブジェクトを含む大規模なデータ構造、たとえば huge があると想像してくださいInitialFunctionality
。C++ の場合:
class InitialFunctionality
{
public:
void iCanDoThis();
}
hugeVector vector<InitialFunctionality>; // <- lots of elements inside! :)
私の目標は、可能な限りパフォーマンスへの影響を最小限に抑えてオブジェクトの機能を動的に拡張することです。InitialFunctionality
hugeVector
class ExtraFunctionality: public InitialFunctionality
{
public:
int iOfferThisToo;
}
よく知られているDecorator パターンは、構造化されていないオブジェクトに最適です。これを使用して、クラスからオブジェクトの機能を動的に拡張し、InitialFunctionality
後でそれらを喜んで渡すことができます。
hugeVector
しかし、順序を変更せずにパフォーマンスへの影響を最小限に抑えてオブジェクトを拡張するにはどうすればよいでしょうか? たとえば、ベクターの複製は、そのサイズのために実行できません。
元のオブジェクトへの参照を保持し、含まれているオブジェクトを必要に応じて (つまり、適応されたベクトル要素がアクセスされると) 遅延変換する、ベクトルにある種のアダプターを使用することを考えていました。hugeVector
ただし、任意のメソッドで必要な変換自体 (つまり、初期化) とは別にiOfferThisToo
、オブジェクトが既に変換されているかどうかを確認するためにキャッシュを保持する必要があります。このようなキャッシュは非常に高価になる可能性があります。