【问题标题】:How to make reference variable to boost::bimap.left?如何为 boost::bimap.left 创建引用变量?
【发布时间】:2016-06-07 08:14:56
【问题描述】:

我正在使用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;

【问题讨论】:

  • 你试过auto &amp;还是不在乎?
  • @nwp 哇,谢谢。现在我知道auto 有什么用。如果你回答我会接受。不过,如果只是为了了解如何阅读这些令人困惑的 Boost 文档,了解实际类型是什么会很好。
  • boost::bimaps::bimap&lt;int,std::string&gt;::left_map &amp; lmap 怎么样?
  • @DevanshMohanKaushik 我试过了,但没有用(我在我的问题中添加了错误消息)。
  • 这很奇怪。因为boost::bimap&lt; int,std::string &gt; mymap; boost::bimaps::bimap&lt;int,std::string&gt;::left_map &amp; lmap= mymap.left; 对我来说很好用。

标签: c++ boost types boost-bimap


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    paramIDStrings::left_map &paramIDStringsByID = paramIDStrings.left;
    

    【讨论】:

      猜你喜欢
      • 2012-01-17
      • 2021-12-23
      • 2012-11-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-26
      • 1970-01-01
      相关资源
      最近更新 更多