2016-08-16 49 views
1

更改成員的數目我需要一個模板類,它具有不同的成員,具體取決於調用哪個ctor。 我設法得到一個類,它有不同的成員使用sfinae與一個基類(我幾乎像這樣做了SFINAE on member variable)。 現在我的問題是,我可以實現一個單獨的模板類,它具有不同的成員,具體取決於該類的哪個類被調用? 也許有人可以有一個想法如何實現這一點。根據構造函數

編輯︰我目前使用boost::variant,但問題是,該變種中最大的對象是巨大的,而最小的是一個指針。這是一個真正的性能問題,因爲大部分時間指針都在變體中。

編輯II:如果這將與男星合作,將是真棒,但如果沒有,工廠氣電兩用將正常工作。

編輯III(或我想要實現的): 我目前正在製作一個DSL,它轉換爲C++。 因爲我試圖讓多態性成爲可能,所以我只傳遞指向函數的指針。因爲有些指針是引用計數的,有些指針是原始的,這取決於用戶想要的內容,可以有shared_pointers和同一類的原始指針。這就是爲什麼我不能讓兩個不同的類,因爲如果一個函數被調用的一個指針,它應該是相同的功能,否則我不得不超負荷所有fnctions,這會給我 2 ** n個函數時,函數有n個參數。 這就是爲什麼我試圖創建一個類,它可能代表原始指針或shared_ptr,基於傳遞給ctor的類。

+2

是否_have_是一個構造函數?它可以代替工廠功能嗎? – ildjarn

+3

這看起來像一個奇怪的想法......你想要做什麼? – Holt

+0

@ildjarn:完全是我的想法:-)創建一個按需交付對象的生成器/工廠。 – Klaus

回答

1

您應該簡單地繼續使用variant<>但代替存儲你的巨大類作爲一個對象,它存儲爲指針,以及:

boost::variant<common_case*, huge_class*> 

既然你說你平時存儲指針,無論如何,這並不因爲所有對象指針的大小都是相同的,所以會浪費任何東西,並回收100%的浪費內存。