【发布时间】:2021-12-02 04:00:08
【问题描述】:
我正在寻找有关 C++ 中运行时自省如何工作的信息。
到目前为止,我发现附加信息将存储为每种类型的运行时类型信息 (RTTI)。我找不到这些信息以什么形式存储或如何检查或访问。
想想如果我们有两种非常相似的类型,内省是如何工作的,例如:
class TypeOne {
string name;
}
class TypeTwo {
string name;
}
哪些信息会准确地存储在内存中,以便我们通过自省来区分这两种类型?
TL;DR 寻找有关如何实施自省的更多信息。
编辑 1: 让我们明确一点,我不需要知道如何使用自省,而是知道它是如何实现的。编译器如何生成 RTTI 信息?它是按每个实例化的对象存储的吗?最后在运行时如何比较 RTTI?
【问题讨论】:
-
这能回答你的问题吗? C++: type_info to distinguish types
-
没有读取类型信息。请提供相关示例。
-
您需要检查工具链的源代码 - "...
type_info类包含有关类型的实现特定信息, ..." - en.cppreference.com/w/cpp/types/type_info -
@ l000p 你是在问为什么编译器知道
typeid(TypeOne)应该为TypeOne而不是TypeTwo返回type_info?你认为编译器很难做什么? -
对于这些类型,编译器甚至不会进行运行时自省。它只会在编译时直接链接到硬编码的
type_info。您的样本不会涉及任何 RTTI。
标签: c++ class introspection