C++ 如何在Boost中使用元组映射?
尝试将ID映射到包含任意数据的元组:C++ 如何在Boost中使用元组映射?,c++,boost,C++,Boost,尝试将ID映射到包含任意数据的元组: typedef boost::tuples::tuple<std::string, std::string, unsigned char> data; typedef std::map<uint64, data> data_map; const data_map DATA = boost::assign::map_list_of (0, boost::tuples::make_tuple("XXX", "xxx",
typedef boost::tuples::tuple<std::string, std::string, unsigned char> data;
typedef std::map<uint64, data> data_map;
const data_map DATA = boost::assign::map_list_of
(0, boost::tuples::make_tuple("XXX", "xxx", 0))
(0, boost::tuples::make_tuple("YYY", "yyy", 1))
(0, boost::tuples::make_tuple("ZZZ", "zzz", 2))
但随后(在检查是否找到后)通过以下方式访问:
抛出一个错误:
error: invalid initialization of reference of type 'boost::tuples::cons<const char (&)[12], boost::tuples::cons<int, boost::tuples::null_type> >::stored_head_type {aka const char (&)[12]}' from expression of type 'const char [11]'
错误:从'const char[11]类型的表达式初始化'boost::tuples::cons::stored_head_type{aka const char(&)[12]}'类型的引用无效
尝试使用:
string("xxx")
而不是:
"xxx"
对于内部的每个字符串,进行元组调用。尝试使用:
string("xxx")
而不是:
"xxx"
对于您内部的每个字符串,进行元组调用。使用我的水晶球: 我想您已经使用了
decltype(obj)
其中object是std::make_tuple(“abcdefghijk”,…)
或std::tie(“abcdefghij,…)
的结果
这是因为错误消息涉及这种类型的元组元素(constchar(&)[12]
)
演示上述代码是否正确:
#include <boost/assign.hpp>
#include <boost/tuple/tuple.hpp>
#include <map>
typedef boost::tuples::tuple<std::string, std::string, unsigned char> data;
typedef std::map<uint64_t, data> data_map;
int main() {
const data_map DATA = boost::assign::map_list_of
(0, boost::tuples::make_tuple("XXX", "xxx", 0))
(1, boost::tuples::make_tuple("YYY", "yyy", 1))
(2, boost::tuples::make_tuple("ZZZ", "zzz", 2));
data_map::const_iterator itData = DATA.find(2);
data metadata = itData->second;
}
#包括
#包括
#包括
typedef boost::tuples::tuple数据;
typedef std::地图数据\地图;
int main(){
const data\u map data=boost::assign::map\u列表
(0,boost::tuples::make_tuple(“XXX”,“XXX”,0))
(1,boost::tuples::make_tuple(“YYY”,“YYY”,1))
(2,boost::tuples::make_tuple(“ZZZ”,“ZZZ”,2));
data\u map::const\u迭代器itData=data.find(2);
数据元数据=itData->秒;
}
玩我的水晶球:
我想您已经使用了decltype(obj)
其中object是std::make_tuple(“abcdefghijk”,…)
或std::tie(“abcdefghij,…)
的结果
这是因为错误消息涉及这种类型的元组元素(constchar(&)[12]
)
演示上述代码是否正确:
#include <boost/assign.hpp>
#include <boost/tuple/tuple.hpp>
#include <map>
typedef boost::tuples::tuple<std::string, std::string, unsigned char> data;
typedef std::map<uint64_t, data> data_map;
int main() {
const data_map DATA = boost::assign::map_list_of
(0, boost::tuples::make_tuple("XXX", "xxx", 0))
(1, boost::tuples::make_tuple("YYY", "yyy", 1))
(2, boost::tuples::make_tuple("ZZZ", "zzz", 2));
data_map::const_iterator itData = DATA.find(2);
data metadata = itData->second;
}
#包括
#包括
#包括
typedef boost::tuples::tuple数据;
typedef std::地图数据\地图;
int main(){
const data\u map data=boost::assign::map\u列表
(0,boost::tuples::make_tuple(“XXX”,“XXX”,0))
(1,boost::tuples::make_tuple(“YYY”,“YYY”,1))
(2,boost::tuples::make_tuple(“ZZZ”,“ZZZ”,2));
data\u map::const\u迭代器itData=data.find(2);
数据元数据=itData->秒;
}
用直接创建数据元组替换boost::tuples::make_tuple
时:
typedef boost::tuples::tuple<std::string, std::string, unsigned char> data;
const data_map DATA = boost::assign::map_list_of
(0, data("XXX", "xxx", 0))
(1, data("YYY", "yyy", 1))
(2, data("ZZZ", "zzz", 2))
typedef boost::tuples::tuple数据;
const data\u map data=boost::assign::map\u列表
(0,数据(“XXX”,“XXX”,0))
(1,数据(“YYY”,“YYY”,1))
(2,数据(“ZZZ”,“ZZZ”,2))
用直接创建数据元组替换boost::tuples::make_tuple
时:
typedef boost::tuples::tuple<std::string, std::string, unsigned char> data;
const data_map DATA = boost::assign::map_list_of
(0, data("XXX", "xxx", 0))
(1, data("YYY", "yyy", 1))
(2, data("ZZZ", "zzz", 2))
typedef boost::tuples::tuple数据;
const data\u map data=boost::assign::map\u列表
(0,数据(“XXX”,“XXX”,0))
(1,数据(“YYY”,“YYY”,1))
(2,数据(“ZZZ”,“ZZZ”,2))
您确定是该行导致错误吗?看起来不像。当我用创建数据元组替换boost::tuples::make_tuple
调用时,直接解决了问题。是的,这比你在问题中所说的更有意义。你确定是那一行导致了错误吗?看起来不像。当我用创建数据元组替换boost::tuples::make_tuple
调用时,直接解决了问题。是的,这比你在问题中所说的更有意义。