想象一下,我有一个大型数据结构,比如说一个巨大的vector
,它的创建不受我的控制(即我不能修改它的静态类型),其中包含 class 的对象InitialFunctionality
。在 C++ 中:
class InitialFunctionality
{
public:
void iCanDoThis();
}
hugeVector vector<InitialFunctionality>; // <- lots of elements inside! :)
我的目标是以尽可能低的性能影响动态扩展InitialFunctionality
对象的功能,比方说:hugeVector
class ExtraFunctionality: public InitialFunctionality
{
public:
int iOfferThisToo;
}
著名的装饰器模式非常适用于非结构化对象。您可以使用它来动态扩展InitialFunctionality
类中对象的功能,然后愉快地传递它们。
但是如何在hugeVector
不改变其顺序且对性能影响最小的情况下扩展对象呢?例如,由于它的大小,复制向量是不行的。
我正在考虑为向量使用某种适配器,它保留对原始对象的引用hugeVector
并根据需要懒惰地转换包含的对象(即,当访问适应的向量元素时)。然而,除了iOfferThisToo
任何方法都需要的转换本身(即初始化)之外,这需要保留一个缓存以检查对象是否已经转换。这样的缓存可能非常昂贵。