【发布时间】:2016-04-06 08:32:35
【问题描述】:
我有以下shared_ptr 到map:
std::shared_ptr<std::map<double, std::string>>
我想使用braced-init对其进行初始化。有可能吗?
我试过了:
std::string s1("temp");
std::shared_ptr<std::map<double, std::string>> foo = std::make_shared<std::map<double, std::string>>(1000.0, s1);
但是使用 Xcode 6.3 编译时会出现以下错误:
/usr/include/c++/v1/map:853:14: Candidate constructor not viable: no known conversion from 'double' to 'const key_compare' (aka 'const std::__1::less<double>') for 1st argument
我尝试了第一个参数 (1000.0) 的其他变体,但均未成功。
谁能帮忙?
【问题讨论】:
-
可能,但不漂亮,
std::shared_ptr<std::map<double, std::string>> foo = std::make_shared<std::map<double, std::string>>(std::initializer_list<std::map<double, std::string>::value_type>{{1000.0, s1}}); -
或者只是
std::shared_ptr<std::map<double, std::string>> foo = std::make_shared<std::map<double, std::string>>(std::map<double, std::string>{{1000.0, s1}});,但还是不太好 -
那行得通。我注意到
value_type的使用。我看到它只是typedef pair<const Key, Type>。为什么我需要那个? -
问题是您添加的一个对象是 std::pair
,因此您需要将 std::pair 放入花括号初始化列表中。编辑:当然是地图。
标签: c++ c++11 shared-ptr stdmap list-initialization