Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在Boost中使用元组映射?_C++_Boost - Fatal编程技术网

C++ 如何在Boost中使用元组映射?

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",

尝试将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))
但随后(在检查是否找到后)通过以下方式访问:

抛出一个错误:

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
调用时,直接解决了问题。是的,这比你在问题中所说的更有意义。