如何使引用变量boost :: bimap.left?

时间:2016-06-07 08:14:56

标签: c++ boost types boost-bimap

我使用boost::bimap将整数映射到字符串:

typedef boost::bimap<int, std::string> ParamIDStrings;
typedef ParamIDStrings::value_type id_pair;
extern const ParamIDStrings paramIDStrings;

我正在尝试创建引用变量,因此我可以编写如下代码:

paramIDStringsByID.at(5);
// Instead of having to remember which side is which:
paramIDStrings.left.at(5);

但我很难解释Boost documentation,了解bimap::left的类型。

我试过了:

// Compiler throws error: invalid use of template-name 'boost::bimaps::bimap' without an argument list
boost::bimaps::bimap::left &paramIDStringsByID = paramIDStrings.left;

// Compiler throws error: 'paramIDStrings' does not name a type
paramIDStrings::left_map &paramIDStringsByID = paramIDStrings.left;

// Compiler throws error: invalid initialization of reference of type boost::bimaps::bimap<int, std::__cxx11::basic_string<char> >::left_map
boost::bimaps::bimap<int,std::string>::left_map &cParamIDStringsByID = cParamIDStrings.left;

2 个答案:

答案 0 :(得分:2)

您可以使用auto &让编译器为您完成工作 如果你想知道推断出的类型,可以使用其中一个技巧from here让编译器告诉你。

答案 1 :(得分:0)

boost/bimap/bimap.hpp有一个typedef:left_mapright_map。所以你可以这样做:

paramIDStrings::left_map &paramIDStringsByID = paramIDStrings.left;