【问题标题】:boost for each problem提升每个问题
【发布时间】:2010-06-07 14:27:54
【问题描述】:
std::map< std::string , std::string > matrix_int;
typedef std::pair< std::string , std::string > lp_type;
BOOST_FOREACH( lp_type &row, matrix_int ){

}

这不能被遵守: 错误 C2440:“正在初始化”:无法从“std::pair<_ty1>”转换为“lp_type &”

当我在元素类型中有 ',' 时,boost 文档说我可以使用 typedef 或预定义一个 var; 但是当我想获得参考时该怎么办?

【问题讨论】:

  • 要修改row吗?

标签: c++ boost boost-foreach


【解决方案1】:

你的 typedef 不正确;它必须是:

typedef std::pair< const std::string , std::string > lp_type;
                   ^ note the added const

映射对中的关键元素是 const 限定的。

使用value_type typedef 会更简洁一些;这样你就不会重复类型信息:

typedef std::map<std::string, std::string> map_t;
map_t matrix_int;
BOOST_FOREACH(map_t::value_type& row, matrix_int){

}

【讨论】:

  • 虽然技术上是正确的,但我认为使用地图的内部 typedef value_type 会更好,因为它不会暴露这种复杂性。
  • @Matthieu:是的;三个人说,我在编辑时将其添加为建议。 :-P 我完全同意。
【解决方案2】:

Is it possible to use boost::foreach with std::map?

看起来你需要这样做:

typedef std::map< std::string, std::string > MyMap;
BOOST_FOREACH( MyMap::value_type& row, matrix_int ) {
}

【讨论】:

    【解决方案3】:

    我认为詹姆斯·麦克内利斯是对的。我将添加您利用 std::map 提供的value_type typedef 的建议。那么您的代码可能如下所示:

    typedef std::map< std::string , std::string > MyMap;
    MyMap matrix_int;
    
    BOOST_FOREACH( MyMap::value_type &row, matrix_int ){
    
    }
    

    【讨论】:

      猜你喜欢
      • 2019-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多