gpt4 book ai didi

c++ - 包含对象和容器的容器

转载 作者:行者123 更新时间:2023-11-30 01:29:27 25 4
gpt4 key购买 nike

我正在尝试创建一个将被迭代的结构,存储在其中的对象将按从左到右的顺序绘制。但是会有容器与可绘制对象一起存储。这些容器我认为它们是绘图堆栈,其中可绘制对象被绘制在彼此之上。我写了一些粗略的伪代码,但我无法想出一个通用接口(interface)来让我的容器和可绘制对象继承。我的目标是容器和可绘制对象之间的通用接口(interface)。我想我可以通过插入容器来做到这一点,即使它们里面只有一个可绘制对象,我觉得这只会占用更多内存并降低速度。我也不想避免强制转换对象以获得正确的调用。有人可以建议我应该做什么吗,我不是最先进的程序员,但我确实在努力提高速度和减少代码。到目前为止,这是我所拥有的(我知道一些接口(interface)调用与依赖项不匹配,我只是不知道要匹配什么):

class IDrawable {
protected:
signal_t sig; // this is an enumeration
public:
void paint(QPainter &painter); // This functionality will be defined here since it is painting to a pixmap

virtual void reset() = 0;
virtual void init() = 0; // Setup code will go here
virtual void update(float) = 0;
};

class Signal : public virtual IDrawable {
private:
bool state; // By default this will be false
public:
Signal();
virtual ~Signal();
// Parameters for update is 0 or 1, since the graphic is just toggled on or off
virtual void update(float) = 0; // Drawing happens here. Will draw to pixmap
bool state() {return state;}
};

class Gage : public virtual IDrawable {
private:
float cur_val;
public:
Gage();
virtual ~Gage();
virtual void init() = 0; // Setup code will go here
virtual void update(float) = 0; // Drawing happens here. Will draw to pixmap
};

class TextGage : public virtual Gage {
public:
TextGage();
virtual ~TextGage();
void update(float); // Define update functionality here
};

// a stack can coexist with a Gage object in a container
class DrawableStack : public virtual IDrawable {
private:
QMap<signal_t, IDrawable*> *Stack;
public:
DrawableStack();
virtual ~DrawableStack();

void init() {
Stack = new QMap<signal_t, IDrawable*>();
}

void update(signal_t,float); // Drawing happens here. Will draw to pixmap

void setStack(QMap<IDrawable*> *gageStack) {
Stack = gageStack;
}

void push(IDrawable* node) {
Stack.insert(node->sigType, node);
}
};

最佳答案

这是您需要应用的经典复合设计模式:

http://en.wikipedia.org/wiki/Composite_pattern

关于c++ - 包含对象和容器的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5898909/

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