首页 > 编程笔记 > C++笔记 阅读:27

C++ std::type_index的用法(附带实例)

C++ 的 std::type_index 类位于 <typeindex> 头文件中,封装了对 std::type_info 对象的引用,提供了一种方式来安全地存储和使用类型信息的索引。

std::type_index 主要作为关联容器如(std::map 或 std::unordered_map)的键值使用,因为直接使用 std::type_info 是不允许的(type_info 对象没有公开的默认构造函数,且拷贝和赋值操作都被禁止)。

std::type_index 的主要功能和用途如下:
下面的程序演示了 std::type_index 的用法:
#include <typeindex>
#include <typeinfo>
#include <unordered_map>
#include <iostream>
#include <memory>
class Base {
public:
    virtual ~Base() {}
    virtual void doWork() = 0;
};
class Derived1 : public Base {
public:
    void doWork() override { std::cout << "Derived1 working." << std::endl; }
};
class Derived2 : public Base {
public:
    void doWork() override { std::cout << "Derived2 working." << std::endl; }
};
int main() {
    std::unordered_map<std::type_index, std::unique_ptr<Base>> factory;
    // 使用 type_index 来索引不同的派生类
    factory[std::type_index(typeid(Derived1))] = std::make_unique<Derived1>();
    factory[std::type_index(typeid(Derived2))] = std::make_unique<Derived2>();
    // 调用各个对象的 doWork 函数
    for (auto& pair : factory) {
        pair.second->doWork();
    }
    return 0;
}
执行结果为:

Derived2 working.
Derived1 working.

在这个例子中,std::type_index 用于在一个 unordered_map 中索引不同的派生类对象。每个类型都与一个动态分配的对象关联,我们可以通过类型信息动态地访问并调用适当的函数。这样的用法展示了 std::type_index 在实现基于类型的逻辑分派中的实用性和灵活性。

相关文章