簡體   English   中英

C ++的組成和初始化

[英]c++ composition and initialization

我有以下(示例)類

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM