从原始内存和类分析器中推导出原始类型

时间:2016-01-18 06:43:15

标签: c++ pointers memory metaprogramming type-deduction

规格:

编译器: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有一些不错的元编程。

1 个答案:

答案 0 :(得分:1)

简单的答案:
不,在运行时期间不提供此信息。但是,您可以通过alignof(),sizeof()进行有根据的猜测,并了解通常用于某些大小类型的值的范围。

或者创建自己的Reflection API。