规范:
编译器: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/