2011-04-26 123 views
1

我試圖仿效升壓任何類似類::任何我的一個玩具語言,從以下問題接受的答案之後,實施促進

Accessing Values in a Class Similar to boost::any

我可以有,

Element e1 = 11; 
Element e2 = 12.1; 

現在我想超載+,所以我可以有,

e3 = e1 + e2; 

但在運行期間,我不知道e1是否會保存一個int或一個double,但它會是數字。 因此,我如何修改常量,以便它還保存一個變量,告訴我什麼樣的數字元素保持,因此我可以調用正確的Get方法。

 

    template /typename Datatype/ 
    Element(Datatype InitialValue) 
    { 
     StoredValue = new ValueStorage(InitialValue); 
    } 
 

我也這樣做對不具有異常微處理器,通過-fno-RTTI編譯器,不能使用STDLIB或升壓。

+0

沒有RTTI,你不能使用dynamic_cast的(這是在您的其他問題接受答案的基礎上) – 2011-04-26 13:58:47

+0

@陶Szelei:你的意思是它的static_cast工作,如果我能以某種方式嵌入類型信息的對象,我可以使用它來靜態轉換 – 2011-04-26 14:07:00

+0

static_cast不會執行任何運行時檢查。如果轉換無法完成,它將悄然失敗。 (除此之外,「不知何故」會是什麼?)如果你想存儲數字類型,爲什麼不製作數字基類並使用多態性(虛函數)來實現你想要的? – 2011-04-26 14:29:20

回答

0

也許Curiously recurring template pattern可以幫助你。我們的想法是繼承基類,將模板參數設置爲派生類(這是合法的,因爲在class Derived之後記下來,它是源中的有效標識符)。我不知道這是否比虛函數更稀疏,但肯定會避免它們:)。

如果你的內存很小,也許你應該評估移動到另一種語言(C?)的選項,因爲C++在嵌入式系統上並不輕巧。