如何从std::type_index获取const std::type_info&?
如何从std::type_index获取const std::type_info&?
没问题,这其实很简单——你可以直接调用std::type_index提供的type_info()成员函数来获取对应的const std::type_info&引用。
给你举个实际可运行的代码例子:
#include <typeindex> #include <typeinfo> #include <iostream> int main() { // 从int类型的type_info创建type_index实例 auto type_idx = std::type_index(typeid(int)); // 调用type_info()成员函数拿到对应的type_info引用 const std::type_info& type_info_ref = type_idx.type_info(); // 验证输出,打印类型名称(不同编译器的name()输出格式可能有差异) std::cout << "对应的类型名称:" << type_info_ref.name() << std::endl; return 0; }
再补充下你关心的几个细节:
- 你对
std::type_index的理解完全正确:它本质就是对const std::type_info*的轻量包装,核心目的就是为类型信息提供std::hash、std::equal_to和std::less的适配接口,这样就能把类型信息作为键放进std::unordered_map、std::set这类需要可哈希/可比较键的标准容器里使用。 - 关于
std::type_info对象的存储:它们确实是在程序编译阶段就静态生成的,每个唯一的类型都会对应一个全局的type_info实例。所以std::type_index里保存的指针指向的是这个长期有效的静态对象,你通过type_info()拿到的引用完全安全,不用担心出现悬垂引用的问题。
备注:内容来源于stack exchange,提问作者David Carpenter
相关产品推荐
相关产品推荐

