c ++组合和初始化

时间:2014-03-21 21:38:02

标签: c++ initialization idioms initializer-list

我有以下(示例)类

class ComponentA : public ComponentBase {
  Renderer renderer;
}

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

我希望保持派生组件类的灵活性,因此可能会有许多不同的渲染器,当然还有其他对象是组件的一部分。

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

此外,渲染器可能在组件的整个生命周期中可能不是必需的,这将再次要求渲染器具有某种类型的&#34; off&#34;开关。

当然,一个(独特的)指针可以解决问题,但是如果没有必要,我想避免使用它。

我可以用来解决这些问题的习惯用法/解决方案吗?

1 个答案:

答案 0 :(得分:1)

您所寻找的不仅仅是经典继承吗?有点像

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;
}