如何将 cpp typeid(T).hash_code() 转换为类型。 (具有 void* destroy 函数 PROB)
how to convert cpp typeid(T).hash_code() to type. (having void* destroy function PROB)
我正在制作一些像这样的经理class。
#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' classes 保存在像 'unsorted_map' 这样的容器中(与容器无关)
并想调用一个销毁函数。但是我一直在通过 void* 保存指针
因此,如果我删除 void* , destroy 函数将不起作用!
我将保存类型,这样我就可以转换回它自己的类型。
像这样
delete (Ctest*)iter->second;
如何转换回我的模板类型。我需要一些帮助谢谢!
最简单的解决方案是虚拟 CObjectBase::~CObjectBase
。现在你不再需要 void*
。
我正在制作一些像这样的经理class。
#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' classes 保存在像 'unsorted_map' 这样的容器中(与容器无关) 并想调用一个销毁函数。但是我一直在通过 void* 保存指针 因此,如果我删除 void* , destroy 函数将不起作用! 我将保存类型,这样我就可以转换回它自己的类型。 像这样
delete (Ctest*)iter->second;
如何转换回我的模板类型。我需要一些帮助谢谢!
最简单的解决方案是虚拟 CObjectBase::~CObjectBase
。现在你不再需要 void*
。