gpt4 book ai didi

c++ - 结构化对象的高性能装饰器模式

转载 作者:太空狗 更新时间:2023-10-29 23:20:42 25 4
gpt4 key购买 nike

假设我有一个很大的数据结构,比方说一个巨大的vector,它的创建不受我的控制(即我不能修改它的静态类型),包含类InitialFunctionality<的对象。在 C++ 中:

class InitialFunctionality
{
public:
void iCanDoThis();
}

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

我的目标是动态扩展 hugeVector 中的 InitialFunctionality 对象的功能,尽可能降低对性能的影响,比方说:

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

众所周知Decorator pattern非常适合非结构化对象。您可以使用它来动态扩展 InitialFunctionality 类中对象的功能,并从此愉快地传递它们。

但是如何扩展 hugeVector 中的对象而不改变其顺序并且对性能的影响最小?例如,由于 vector 的大小,复制 vector 是行不通的。

我正在考虑使用某种 Adapter对于 vector ,它保留对原始 hugeVector 的引用,并根据需要延迟转换包含的对象(即,在访问自适应 vector 元素时)。但是,除了任何方法都需要的转换本身(即初始化 iOfferThisToo)之外,这还需要保留缓存以检查对象是否已经转换。这样的缓存可能非常昂贵。

最佳答案

如果您没有添加额外的成员,您应该能够执行如下操作:

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

private:
// disable all ctors
};

然后重铸指向 vector 中的 InternalFunctionality 的指针。

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

既然你是,我想你遇到了一些麻烦。

关于c++ - 结构化对象的高性能装饰器模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15185913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com