如何将引用变量设为boost::bimap.left?
How to make reference variable to boost::bimap.left?
我正在使用 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 ¶mIDStringsByID = paramIDStrings.left;
// Compiler throws error: 'paramIDStrings' does not name a type
paramIDStrings::left_map ¶mIDStringsByID = 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;
您可以使用 auto &
让编译器为您完成工作。
如果您想知道推导的类型,您可以使用技巧之一 from here 让编译器告诉您。
boost/bimap/bimap.hpp
有一个类型定义:left_map
和 right_map
。所以你可以这样做:
paramIDStrings::left_map ¶mIDStringsByID = paramIDStrings.left;
我正在使用 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 ¶mIDStringsByID = paramIDStrings.left;
// Compiler throws error: 'paramIDStrings' does not name a type
paramIDStrings::left_map ¶mIDStringsByID = 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;
您可以使用 auto &
让编译器为您完成工作。
如果您想知道推导的类型,您可以使用技巧之一 from here 让编译器告诉您。
boost/bimap/bimap.hpp
有一个类型定义:left_map
和 right_map
。所以你可以这样做:
paramIDStrings::left_map ¶mIDStringsByID = paramIDStrings.left;