如何将cpp-typeid(T).hash_code()转换为类型.(具有void*destroy函数PROB)

how to convert cpp typeid(T).hash_code() to type. (having void* destroy function PROB)

本文关键字:void 具有 类型 PROB destroy 函数 code cpp-typeid hash 转换      更新时间:2024-09-28

我正在制作这样的Manager类。

#pragma once
#include <iostream>
#include <unordered_map>
using namespace std;
class TestMgr
{
public:
TestMgr() = default;
~TestMgr() {
for (auto iter = m_test.begin(); iter != m_test.end(); )
{
delete iter->second; // void* doesn't call destory function
iter = m_test.erase(iter);
}
}
template<typename T>
T* DoSomething()
{
CObject<T>* someClass = (CObject<T>*)m_test[typeid(T).hash_code()];
if (someClass == nullptr)
{
m_test[typeid(T).hash_code()] = new CObject<T>();
}
return someClass->DoSomething();
}
unordered_map<size_t, void*>    m_test;
};

我想把"Template"类保存在像"unsorted_map"这样的容器中(与容器无关(并且想要调用destroy函数。但我一直在用void保存指针*所以如果我删除void*,destroy函数就不起作用了!我会保存类型,这样我就可以转换回它自己的类型。像这个

delete (Ctest*)iter->second;

如何转换回我的模板类型。我需要帮助谢谢!

最简单的解决方案是虚拟CObjectBase::~CObjectBase。现在您不再需要void*了。