初始化 std::map<std::string, boost::any>
时, 值 boost::any
确实可以接受任何类型的值,包括 std::map
秒。但是,首先需要明确定义它们,例如,
#include <map>
#include <boost/any.hpp>
int main() {
std::map<std::string, boost::any> a = {{"y", 2}};
std::map<std::string, boost::any> any = {
{"hh", 4},
{"g", a} // alright
};
}
暗中尝试同样的事情,例如,
#include <map>
#include <boost/any.hpp>
int main() {
std::map<std::string, boost::any> any = {
{"hh", 4},
{"g", {{"y", 2}}} // mööp
};
}
导致编译错误
error: could not convert ‘{{"hh", 4}, {"g", {{"y", 2}}}}’ from ‘<brace-enclosed initializer list>’ to ‘std::map<std::__cxx11::basic_string<char>, boost::any>’
怎么了?有没有办法将初始化放入一条语句中?
最佳答案
嗯,编译器不知道你的初始化列表最终应该变成什么类型。
给他一些帮助:
#include <map>
#include <boost/any.hpp>
using namespace std;
int main() {
using StringToAny = std::map<std::string, boost::any>;
StringToAny any = {
{"hh", 4},
{"g", StringToAny{{"y", 2}}} // jippie!
};
}
问题已解决。
关于c++ - 在 std::map<..., boost::any> 中初始化子图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32060790/