规格:
编译器:TDM-GCC 5.1.0
操作系统:Windows 8.1 64位
我通过C ++标准库进行了非常彻底的搜索,做了一些其他研究,甚至在一些内联汇编中达到了顶峰。但我还没有得出结论,所以这里有:
鉴于我的编译器,如果我知道基本类型的地址和大小,那么在C ++(直到C ++ 14)中是否有任何方法可以从这些信息中推断出类型,以及查看原始数据在内存中(我也愿意使用内联汇编)?
一个例子:
如果我声明了以下内容:
float x = 1.0f;
int y = 0x3f800000; //The same raw value in memory as 'x'
有没有办法,仅仅通过查看这些变量的原始内容来推断出它们的类型?
如果简单的答案是“不”,那么请让我告诉你这个问题的背景,也许你可以指出我正确的方向。
简而言之,我正在尝试编写一个可以在运行时剖析/分析类的函数(在最大程度上,假设C ++唯一真正的元编程是模板)。我希望能够在给定该类的实例的情况下确定类的成员对象。 “type_traits”库在这里并没有真正帮助我,'sizeof()'和'alignof()'提供了提示,但它不足以推断出成员对象。并且'typeid()'是无用的,因为我正在处理void指针,除了抓住类的名称。
指出C ++ ABI / RTTI有一些不错的元编程。
答案 0 :(得分:1)
简单的答案:
不,在运行时期间不提供此信息。但是,您可以通过alignof(),sizeof()进行有根据的猜测,并了解通常用于某些大小类型的值的范围。
或者创建自己的Reflection API。