調用其他構造比方說,我有一個名爲網類,並在網我有不同的靜態方法,如構造,不同的簽名
static Mesh makeTriangle(...)
一些參數。然後我也有:
static Mesh makeBox(...)
:不同類型和參數比makeTriangle號碼,static Mesh makeSphere(...)
:與完全相同相同類型和參數比makeTriangle號等
如何創建一個構造函數,該構造函數將const std::string &name
作爲第一個參數和可傳遞給的可變數量的參數創建Mesh對象的右側「make」方法?
這是可能的在c + + 11?
我試圖用這樣的
template<typename... Params>
Mesh(const std::string &name, Params&&... parameters)
: Mesh(init(name, std::forward<Params>(parameters)...)) {}
但在init方法的一些點可變參數模板我必須做一些像
template<typename... Params>
static Mesh init(const std::string &name, Params&&... parameters) {
if(name == "box") return makeBox(std::forward<Params>(parameters)...)
if(name == "sphere") return makeSphere(std::forward<Params>(parameters)...)
/* and so on */
}
,編譯器會拒絕編譯,因爲參數包可能與某些make方法參數不匹配。我不能將它放在一個接受字符串並輸出函數指針的映射中,因爲所提及的make方法具有不同的簽名。
那麼我又能如何在C++ 11中做到這一點?
編輯
我想用繼承來爲每個不同的形狀subclases不會是因爲所有網格對象基本上是在空間中的點列表的最佳選擇,它們都是同一個類的對象,他們的唯一途徑不同之處在於它們的構建方式
顯示實際的代碼。 –
第一個參數是否必須是字符串? – ecatmur
@ecatmur我想。構造函數如何調用正確的make方法? – user5667542