用作值的共享指针 - 赋值期间出错

时间:2015-03-19 03:44:15

标签: c++ boost

我有一个像这样定义的分配器

typedef share_ptr<boost::unordered_map<int,string>> T;
boost::unordered_map<int,T> webData;

...
webData[100]=T(new boost::unordered_map<int,string>(make_pair(100,"json data returned")));

我总是在此webDatano instance of boost::unordered_map<K,T,H,P,A>....matches the argument list

上收到错误消息

2 个答案:

答案 0 :(得分:0)

boost::unordered_map没有构造函数接受std :: pair实例作为参数。要摆脱错误,必须编写类似

的内容
#include <boost/unordered_map.hpp>
#include <boost/shared_ptr.hpp>
#include <string>

typedef boost::shared_ptr<boost::unordered_map<int, std::string> > T;

int main() {
    boost::unordered_map<int, T> webData;
    webData[100] = T(new boost::unordered_map<int, std::string>());
    webData[100]->insert(std::make_pair(100, "json data returned"));
    return 0;
}

coliru上的相同代码是here

答案 1 :(得分:0)

除了已经给出的解释之外,你可以使用统一初始化和emplace来减少一些冗长:

<强> Live On Coliru

#include <boost/unordered_map.hpp>
#include <boost/shared_ptr.hpp>
#include <string>

typedef boost::shared_ptr<boost::unordered_map<int, std::string> > T;

int main() {
    boost::unordered_map<int, T> webData;
    webData[100] = T(new T::element_type { { 100, "json data returned" } });
    webData[100]->emplace(200, "more json");
}