gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:14:56 24 4
gpt4 key购买 nike

我有三个层次相关的类:

  • Pattern , 其中有 protected 领域 _panels类型 std::vector<Panel> .
  • Panel ,反过来,有一个 protected 领域_edges , 类型为 std::vector<Edge> .
  • Edge ,最后,有一个 protected 领域_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 .这意味着我必须为 Edge 放置绘图逻辑。和 PanelPattern 的绘制函数中, 这显然不理想。

这里是否有一种我没有看到的不同方法可以避免这一切?使用包装器类会是更合适的方法吗?

最佳答案

你不能拥有一个 Drawable 虚类,它有一个纯虚函数 draw() 而它的所有 drawable后代会执行吗?

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

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

//...

关于c++ - 如何在不复制数据的情况下组成装饰类的层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31302374/

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