1

我想知道typeid类型安全是否是一个“足够硬”的标准来放弃所有通常的预防措施。具体来说,请考虑以下代码片段:

class storage
{
private:
    std::map<std::type_index, void*> objects;

public:
    template<typename T>
    void put(T* ptr)
    {
        objects[typeid(*ptr)] = ptr;
    }
};

storage stor;

ClassA* a = new ClassA();
ClassB* b = new ClassB();

stor.put(a);
stor.put(b);

使用来自的信息从地图中取回对象是否安全typeid

template<typename T>
T* storage::get()
{
    return static_cast<T*>(objects[typeid(T)]);
}

谢谢,N。

4

1 回答 1

1

a2从与具有相同价值的意义上说,它有效a

它不一定是“安全的”。例如,如果a指向某个派生类的实例A,则a2不能保证与 具有相同的值a。所以安全取决于你所说的“放弃通常的预防措施”。您不能放弃“预防措施”,即如果您将指针转换为,void*则需要将其转换回其原始类型。

于 2013-05-27T17:14:59.247 回答