gpt4 book ai didi

c++ - typeid() 是否足以保证类型安全?

转载 作者:太空宇宙 更新时间:2023-11-04 11:54:24 28 4
gpt4 key购买 nike

我想知道 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 中的信息从 map 中取回对象是否安全?

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

谢谢,N.

最佳答案

它有效,在某种意义上 a2a 具有相同的值.

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

关于c++ - typeid() 是否足以保证类型安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16777617/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com