2011-04-26 125 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++在嵌入式系统上并不轻巧。