尝试将 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", 0))
(0, boost::tuples::make_tuple("YYY", "yyy", 1))
(0, boost::tuples::make_tuple("ZZZ", "zzz", 2))
如何访问 DATA 映射中的元组?我正在尝试:
data_map::const_iterator itData = DATA.find(id);
然后访问它(在检查是否找到之后):
data metadata = itData->second;
抛出错误:
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]'
最佳答案
吸引我的 Crystal 球:
我认为您使用过 decltype(obj)
,其中 object 是 std::make_tuple("abcdefghijk",...)
或 std 的结果::领带(“abcdefghij”,...)
。
这是因为错误消息谈到这种类型的元组元素 (const char (&)[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;
}
关于c++ - 如何在 Boost 中使用元组映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32997984/