如何在不复制数据的情况下组成装饰类的层次结构

时间:2015-07-08 19:50:46

标签: c++ inheritance

我有三个层次相关的类:

  • Pattern,其受_panels类型的受保护字段std::vector<Panel>
  • 反过来,
  • Panel有一个受保护的字段_edges,其类型为std::vector<Edge>
  • Edge最后有一个受保护的字段_verts,其类型为std::vector<Eigen::Vector2f>

我还有一个纯虚拟类Renderable,它有一个纯虚函数virtual void render()。我想创建继承自Renderable的三个类中的每个类的专用版本,例如:

class VPattern : public Pattern, public Renderable
{
public:
    void render() { ... }
protected:
    ...
private:
    ...
}; // class VPattern

但是,_panels字段仍会包含Panel的实例,而不包含VPanel的实例。这意味着我必须将EdgePanel的绘制逻辑放在Pattern的绘制函数中,这显然不理想。

这里有不同的方法,我没有看到这会避免所有这些吗?使用包装类是一种更合适的方法吗?

1 个答案:

答案 0 :(得分:0)

您是否有理由不能拥有Drawable虚拟类,该虚拟类具有所有draw()后代都将实现的纯虚函数drawable

public virtual struct Drawable {
    virtual void draw() = 0;
};

public struct Edge : Drawable {
    void draw() {}
};

//...