想象一下,我有一个庞大的数据结构,让我们说一个巨大的vector
,其创建不受我的控制(即我不能修改它的静态类型),包含类InitialFunctionality
的对象。在C ++中:
class InitialFunctionality
{
public:
void iCanDoThis();
}
hugeVector vector<InitialFunctionality>; // <- lots of elements inside! :)
我的目标是动态扩展InitialFunctionality
中hugeVector
对象的功能,尽可能降低性能影响,让我们说:
class ExtraFunctionality: public InitialFunctionality
{
public:
int iOfferThisToo;
}
众所周知的Decorator pattern非常适合非结构化对象。您可以使用它来动态扩展InitialFunctionality
类中对象的功能,并且在此之后愉快地传递它们。
但是如何扩展hugeVector
中的对象而不改变其排序和最小的性能影响?例如,由于它的大小,复制矢量是不可行的。
我正在考虑为向量使用某种Adapter,它保留对原始hugeVector
的引用,并根据需要懒惰地转换所包含的对象(即,当访问适应的向量元素时) 。然而,除了转换本身(即初始化iOfferThisToo
),这是任何方法所需要的,这需要保持高速缓存以检查对象是否已经被转换。这样的缓存可能非常昂贵。
答案 0 :(得分:-1)
如果您没有添加额外的成员,您应该可以执行以下操作:
class myInternalFunctionality : public InternalFunctionality {
public:
//new features
void ICanDoThis();
private:
// disable all ctors
};
然后重新指向向量中的InternalFunctionality。
myInternalFunctionality* myInternalPtr = &hugeVector[i];
myInternalPtr->ICanDoThis();
既然你是,我认为你遇到了一些麻烦。