我有以下(示例)类

class ComponentA : public ComponentBase {
  Renderer renderer;
}

class Renderer {
  Renderer(std::vector<float> verts) : vertices(verts){};
  std::vector<float> vertices;
}


我想使派生的组件类保持灵活,因此可以有很多不同的渲染器,当然还有其他对象也属于该组件。

renderer类没有默认的构造函数,因此我必须在组件的初始化程序列表中或直接在组件的头文件中对其进行初始化。另外,我可以在渲染器中添加默认构造函数,但是如果我有一个类,其中的默认构造函数没有意义或者我不想实现一个默认构造函数,那将需要额外的处理(即,设置对象为没有正确初始化)?

另外,在组件的整个生命周期中,渲染器可能不是必需的,这将再次要求渲染器具有某种“关闭”开关。

现在,当然可以使用一个(唯一的)指针来解决该问题,但是如果没有必要,我想避免这种情况。

我可以使用任何惯用语/解决方案来解决这些问题吗?

最佳答案

您在寻找的不仅仅是古典继承吗?是像

class ComponentA : public ComponentBase {
  RendererBase& renderer;
  ComponentA(RederBase& r):renderer(r) {}
}

class RenderBase {
  // Maybe some mandetory virtual functions in here
};

class RendererTypeFloat : public RenderBase {
  RendererTypeFloat(std::vector<float> verts) : vertices(verts){};
  std::vector<float> vertices;
}

class RendererTypeInt : public RenderBase {
  RendererTypeInt(std::vector<int> verts) : vertices(verts){};
  std::vector<int> vertices;
}

关于c++ - C++的组成和初始化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22569991/

10-12 17:28
查看更多