c++ - 从原始内存和类分析器中推断原始类型

标签 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 具有相当不错的元编程。

最佳答案

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

或者创建您自己的反射 API。

关于c++ - 从原始内存和类分析器中推断原始类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34848666/

相关文章:

c++ - 理论上遍历内存地址?

android - 无法从内部存储读取文件(文件不存在问题)

c++ - C++中捕获外部程序的退出代码

c++ - Boost multiprecision 失败,因为 complex 的实现试图在 _Isinf 或 _Isnan 等内部函数中转换为 double

c - 另一个C指针问题

C - fgets 在初始化指针时不等待输入

linux - sort 如何计算出有多少 RAM?

c++ - Resharper: "some control paths may leak this resource acquisition"C++

c++ - 为什么在初始化和调整对象 vector 大小时调用析构函数?

c++ - C++ 指针的示例用法是什么?