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

How to compose a hierarchy of decorated classes without copying data

本文关键字:层次结构 情况下 复制 数据      更新时间:2023-10-16

我有三个在层次上相关的类:

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

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

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

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

有没有别的方法可以避免这一切?使用包装器类是更合适的方法吗?

是否有一个原因,你不能有一个Drawable虚拟类,有一个纯虚拟函数draw(),它的所有drawable后代将实现?

public virtual struct Drawable {
    virtual void draw() = 0;
};
public struct Edge : Drawable {
    void draw() {}
};
//...
相关文章: