如何将cpp-typeid(T).hash_code()转换为类型.(具有void*destroy函数PROB)
how to convert cpp typeid(T).hash_code() to type. (having void* destroy function PROB)
我正在制作这样的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*
了。
相关文章:
- C++ - 非静态 void* 成员,指向具有相同地址但不同值的不同对象的另一个非静态成员
- C++具有 void 操作数的条件运算符
- 错误 C2084:函数"int main(void)"已具有主体
- 具有非 void 返回类型的虚函数
- 从 'void *' 转换为 'const std::string *&' 必须具有所有中间指针 const 合格
- 将新放置到缓冲区后,缓冲区和实例是否具有相同的 void* 地址?
- 通过void指针通过C ABI传递C++对象(可能具有多个虚拟继承)
- 将void*强制转换为具有多重继承的类
- Constexpr类模板成员函数是否具有推导的void返回类型
- Xcode 变量具有不完整的类型 void
- 错误:void 值未被忽略,因为它应该被忽略,错误:返回语句具有值
- 需要接受教育:声明"void encrypt(char*, int)"具有不同的异常说明符"
- 为什么 void 参数不能存在于具有多个参数的函数中?
- 如何从 C# 调用具有 void* 回调和对象参数的 C++ Dll 中的函数
- 取消引用运算符给出的结果与具有 void* 的数组偏移运算符不同
- 在具有不同签名的 std::function 之间进行转换(T* arg 到 void* arg)
- 不返回值,来自具有非void返回类型的函数
- 我如何用在这个回调中具有编译时类型检查的东西替换void指针?
- 如何从double(*)(void)转换为具有给定参数数量的函数指针
- Linux中的c++运行时错误::glibc检测到free():无效的下一个大小(快速):堆栈具有void ptr元素