在 C++ 中传递智能指针容器作为参数
我有一个如下所示的函数,
void functionA(unordered_map<string, classA*>* arg1);
我需要传递
unordered_map<string, shared_ptr<classA>>
如何将带有shared_ptr的容器传递给接受原始指针容器的函数?我这里使用的是C++0x。
谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
Typewise
unordered_map>
和unordered_map
是不相关的类型。所以你不能直接将一个传递到另一个期望的地方。
您可以:
更改函数的签名,或者
将数据复制到预期类型的对象。
顺便说一句,考虑引用参数而不是指针参数。
另外,请考虑尽可能添加
const
- 它通常有助于使代码更易于理解,因为这样您就可以保证不被修改。干杯&呵呵,,
Typewise
unordered_map<string, shared_ptr<classA>>
andunordered_map<string, classA*>
are unrelated types.So you can't directly pass one where the other is expected.
You can:
change the signature of your function, or
copy the data to an object of the expected type.
By the way, instead of a pointer argument, consider a reference argument.
Also, consider adding
const
wherever possible – it generally helps making the code easier to understand, because you then have guarantee of non-modification.Cheers & hth.,
既然你问了,这个函数的模板可能是这样的:
如果必须的话,你可以使用指针和/或将其设置为非常量。只要传入的映射使用兼容的键类型和某种指向正确类型的指针作为值,它就应该编译并运行。指针是本机指针还是智能指针可能没有什么区别,具体取决于您在函数实现中如何使用它。
Since you asked, here's what a template might look like for this function:
You could use a pointer and/or make it non-const if you must. As long as the map passed in uses a compatible key type and some kind of pointer to the right type as a value, it should compile and run. Whether the pointer is a native pointer or a smart pointer will likely not make a difference, depending on how you used it in your function implementation.
您将必须修改 functionA,或者构建它想要接收的类型的临时 unordered_map 。
You're going to have to either modify functionA, or build a temporary unordered_map of the type that it wants to receive.