如何在不复制数据的情况下组成装饰类的层次结构
How to compose a hierarchy of decorated classes without copying data
我有三个在层次上相关的类:
-
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
。这意味着我将不得不把Edge
和Panel
的绘图逻辑放在Pattern
的绘图函数中,这显然是不理想的。
有没有别的方法可以避免这一切?使用包装器类是更合适的方法吗?
是否有一个原因,你不能有一个Drawable
虚拟类,有一个纯虚拟函数draw()
,它的所有drawable
后代将实现?
public virtual struct Drawable {
virtual void draw() = 0;
};
public struct Edge : Drawable {
void draw() {}
};
//...
相关文章:
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- 如何在不添加对库的依赖的情况下添加与库结构的兼容性
- 为什么不能指向指针,在没有强制转换的情况下访问结构成员?
- C++:为什么可以在没有事先使用 new 的情况下在指向结构的指针上使用 delete?
- 在C++我可以在不在本地声明结构的情况下将结构作为指针传递吗?
- 在这种情况下,我应该为每个WSASend调用传递唯一的重叠结构吗?
- 是否可以在没有结构的情况下创建新的类型变量?
- 在不使用默认构造函数的情况下声明 POD 结构时,会实例化什么?
- 如何在不导致内存泄漏的情况下将数组分配给结构内的指针
- 我可以使用 std::sort 对 C 样式数组(在我的结构情况下)进行排序吗?
- C++:在不违反SRP的情况下向多态类层次结构添加方法
- 结构继承层次结构-动态下转换
- 如何在不使用副本的情况下更改QJson层次结构中的QJsonObject值
- 避免沿平行层次结构向下转换值
- 将层次结构向下投射为具体对象
- 循环包含,如何在不更改类层次结构的情况下解决此问题
- 如何在不复制数据的情况下组成装饰类的层次结构
- 一个模板专门化用于pod,一个模板专门化用于类层次结构,在其他情况下出现错误
- 在不知道完整层次结构的情况下进行双重分派