gpt4 book ai didi

c++ - 如何将派生对象放置到 map 中

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:27:39 25 4
gpt4 key购买 nike

我还是 C++ 的新手,遇到了一个问题,我似乎无法将新的派生类插入到映射中。

我的代码简化如下:

std::map<int, std::unique_ptr<Base_Class> > m;

void func(){
for(int num = 0; num < 100; n++){
m.emplace(num, new Derived_Class() );
}

}

这给了我这个:

error: no matching function for call to 'std::pair <const int, std::unique_ptr<Base_Class> >::pair(int&, Derived_Class*)

我试过不成功:

m.emplace(std::pair(num, new Derived_Class()) );

这给了我这个:

error: no matching function for call to 'std::pair<const int, std::unique_ptr<Base_Class> >::pair(std::pair<int, Derived_Class*>)

我似乎无法弄清楚这一点,如果有任何帮助,我将不胜感激。

最佳答案

m.emplace(num, std::unique_ptr<Derived_Class>(new Derived_Class()));

将是要走的路。自 unique_ptr采用原始指针的构造函数是显式的,它不能从 Derived_Class* 隐式初始化.您需要显式创建一个 unique_ptr放置对象。

我提出这个解决方案是因为您提到了 , 但真正有利的方法是使用 std::make_unique<Derived_Class>() ( 及以后),既要避免重复自己,又要使 unique_ptr 的创建“原子化”。

关于c++ - 如何将派生对象放置到 map 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53689729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com