C++ 实现任何类似的类

C++ 实现任何类似的类,c++,boost,boost-any,C++,Boost,Boost Any,我试图模仿boost::any作为我的一种玩具语言,遵循以下问题的公认答案 我可以 Element e1 = 11; Element e2 = 12.1; e3 = e1 + e2; 现在我想过载+,这样我就可以 Element e1 = 11; Element e2 = 12.1; e3 = e1 + e2; 但在运行时,我不知道e1是保存int还是double,但它是数字。 那么我如何修改const,这样它也会保存一个变量,告诉我一个数字元素的类型,这样我就可以调用正确的Get方法了

我试图模仿boost::any作为我的一种玩具语言,遵循以下问题的公认答案

我可以

Element e1 = 11;
Element e2 = 12.1;
e3 = e1 + e2;
现在我想过载+,这样我就可以

Element e1 = 11;
Element e2 = 12.1;
e3 = e1 + e2;
但在运行时,我不知道e1是保存int还是double,但它是数字。 那么我如何修改const,这样它也会保存一个变量,告诉我一个数字元素的类型,这样我就可以调用正确的Get方法了


    template /typename Datatype/
    Element(Datatype InitialValue)
    {
        StoredValue = new ValueStorage(InitialValue);
    }
我也在一个没有异常、将-fno-rtti传递给编译器、不能使用stdlib或boost的微处理器上执行此操作。

也许可以帮助您。其思想是继承基类,并将模板参数设置为派生类。这是合法的,因为在写下派生类之后,它是源中的有效标识符。我不知道这是否比虚拟函数更稀疏,但它确实避免了它们:


如果你有那么低的内存,也许你应该考虑换一种语言C?因为C++在嵌入式系统上不是轻量级的,

没有RTTI,您不能使用dynamic_cast,它是您的另一个系统中公认答案的基础question@Tamás Szelei:如果我能以某种方式将类型信息嵌入到对象中,这样我就可以使用它来进行静态cast,那么它与static_cast一起工作是什么意思?static_cast不做任何运行时检查。如果转换无法完成,它将自动失败。再说,那又是什么呢?如果你想存储数字类型,为什么不创建一个数字基类并使用多态虚拟函数来实现你想要的呢?@Tamás Szelei:我的意思是说wgen数据类型是一个int类型标志,当它是双精度时设置为1,设置为2,依此类推,虚拟函数是我现在正在使用的,但是它占用了太多的内存,我只有2kb。你似乎想要有区别的并集。