从原始内存和 Class 分析器中推断原始类型

Deducing Primitive Type from Raw Memory and Class Analyzers

规格:

编译器:TDM-GCC 5.1.0
OS: Windows 8.1 64 位

我对 C++ 标准库进行了非常彻底的搜索,还进行了一些其他研究,甚至在某些内联汇编方面达到了顶峰。但是我还没有得出结论,所以这里是:

鉴于我的编译器,如果我知道基本类型的地址和大小,C++(最高 C++14)是否有任何方法可以仅从这些信息中推断出类型,以及查看内存中的原始数据(我也愿意使用内联汇编)?

一个例子:

如果我有以下声明:

float x = 1.0f;
int y = 0x3f800000;  //The same raw value in memory as 'x'

有什么办法,只要查看这些变量的原始内容,就可以推断出它们的类型吗?

如果简单的答案是"no",那么请让我给你介绍一下这个问题的背景,也许你能给我指明正确的方向。

简而言之,我正在尝试编写一个可以在运行时 dissect/analyze 和 class 的函数(在最大可能的范围内,假设 C++ 唯一真正的元编程是模板)。我希望能够在给定 class 的实例的情况下确定 class 的成员对象。 "type_traits" 库在这里并没有真正帮助我,'sizeof()' 和 'alignof()' 提供了提示,但它没有足够的信息来推断成员对象。 'typeid()' 没用,因为我正在使用 void 指针,除了获取 class.

的名称

我祈祷 C++ ABI/RTTI 有一些不错的元编程。

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

或创建您自己的倒影API。