0

我正在制作这样的经理课程。

#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;
};

我想将“模板”类保存在“unsorted_map”之类的容器中(与容器无关)并想调用销毁函数。但我一直通过 void* 保存指针所以如果我删除 void* ,破坏函数不起作用!我会保存类型,所以我可以转换回它自己的类型。像这样

delete (Ctest*)iter->second;

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

4

1 回答 1

1

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

于 2020-11-13T08:10:03.750 回答