具有抽象基类的unique_ptr映射的深层副本

时间:2016-08-10 14:37:12

标签: c++

我有以下问题:我有一个独特指针的地图。唯一指针类型是基类。现在我想复制一下这张地图。我试过这样的事情:

#include <map>
#include <memory>

class A
{
    virtual void myFunc()=0;
};

class B : public A
{
    float b;
public:
    virtual void myFunc() override
    {
        b=1.0;
    }
};


int main()
{
    std::map<int,std::unique_ptr<A>> myMap;
    std::map<int,std::unique_ptr<A>> myMapCopy;

    myMap.emplace(1,std::make_unique<B>());
    for(auto& itMyMap : myMap)
    {
        myMapCopy.emplace(itMyMap.first,std::make_unique<A>(*itMyMap.second));
    }
}

问题是,我必须在调用make_unique时指定类型,但我不知道它是B还是任何其他派生类。是否有一些很好的技巧来制作没有特化的唯一指针的深层副本?

0 个答案:

没有答案