在 C++ 中传递智能指针容器作为参数

发布于 2024-10-04 11:47:45 字数 265 浏览 3 评论 0 原文

我有一个如下所示的函数,

void functionA(unordered_map<string, classA*>* arg1);

我需要传递

unordered_map<string, shared_ptr<classA>>

如何将带有shared_ptr的容器传递给接受原始指针容器的函数?我这里使用的是C++0x。

谢谢

I have a function like below

void functionA(unordered_map<string, classA*>* arg1);

I need to pass in

unordered_map<string, shared_ptr<classA>>

How could I pass in the container with shared_ptr to the function which takes in a container of raw pointer? I am using C++0x here.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

听风念你 2024-10-11 11:47:45

Typewise unordered_map>unordered_map 是不相关的类型。

所以你不能直接将一个传递到另一个期望的地方。

您可以:

  • 更改函数的签名,或者

  • 将数据复制到预期类型的​​对象。

顺便说一句,考虑引用参数而不是指针参数。

另外,请考虑尽可能添加 const - 它通常有助于使代码更易于理解,因为这样您就可以保证不被修改。

干杯&呵呵,,

Typewise unordered_map<string, shared_ptr<classA>> and unordered_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.,

傾城如夢未必闌珊 2024-10-11 11:47:45

既然你问了,这个函数的模板可能是这样的:

template <typename MAP_TYPE>
void functionA(const MAP_TYPE& arg1)
{
    // Use arg1 here
}

如果必须的话,你可以使用指针和/或将其设置为非常量。只要传入的映射使用兼容的键类型和某种指向正确类型的指针作为值,它就应该编译并运行。指针是本机指针还是智能指针可能没有什么区别,具体取决于您在函数实现中如何使用它。

Since you asked, here's what a template might look like for this function:

template <typename MAP_TYPE>
void functionA(const MAP_TYPE& arg1)
{
    // Use arg1 here
}

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.

音盲 2024-10-11 11:47:45

您将必须修改 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文