3

想象一下,我有一个大型数据结构,比如说一个巨大的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任何方法都需要的转换本身(即初始化)之外,这需要保留一个缓存以检查对象是否已经转换。这样的缓存可能非常昂贵。

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 回答