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.