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

时间:2010-11-25 03:49:00

标签: c++ shared-ptr smart-pointers

我有一个类似下面的功能

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

我需要传递

unordered_map<string, shared_ptr<classA>>

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

谢谢

3 个答案:

答案 0 :(得分:2)

Typewise unordered_map<string, shared_ptr<classA>>unordered_map<string, classA*>是不相关的类型。

所以你不能直接传递另一个预期的那个。

你可以:

  • 更改功能的签名,或

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

顺便说一下,不要使用指针参数,而应考虑引用参数。

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

干杯&amp;第h。,

答案 1 :(得分:0)

您将不得不修改函数,或者构建一个它想要接收的类型的临时unordered_map。

答案 2 :(得分:0)

因为你问过,这是这个函数的模板外观:

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

如果必须,您可以使用指针和/或使其成为非const。只要传入的映射使用兼容的键类型和某种指向正确类型的指针作为值,它就应该编译并运行。指针是本机指针还是智能指针可能不会产生影响,具体取决于您在函数实现中如何使用它。