c++ - 为什么 BOOST_FOREACH 无法处理 const boost::ptr_map?

标签 c++ boost foreach

void main()
{
  typedef boost::ptr_map<int, char>  MyMap;
  //typedef std::map<int, char *>  MyMap;  // in contrast with std type it works

  MyMap mymap;

  mymap[1] = new char('a');
  mymap[2] = new char('b');
  mymap[3] = new char('c');

  BOOST_FOREACH(MyMap::value_type value, mymap)
  {
    std::cout << value.first << "  " << value.second << std::endl;
  }

  MyMap const & const_mymap = mymap;

  BOOST_FOREACH(const MyMap::value_type value, const_mymap)
  {
    std::cout << value.first << "  " << value.second << std::endl;
  }
}

以下错误消息来自 GCC 在第二个 BOOST_FOREACH

error: conversion from 'boost::ptr_container_detail::ref_pair<int, const char* const>' to non-scalar type 'boost::ptr_container_detail::ref_pair<int, char* const>' requested

我认为这是指针容器的 ref_pair 的弱点...

最佳答案

基于 this answer ,看来你是对的。但是有一个解决方法。将您的第二个循环更改为:

BOOST_FOREACH(MyMap::const_iterator::value_type value, const_mymap)
{
    std::cout << value.first << "  " << value.second << std::endl;
}

关于c++ - 为什么 BOOST_FOREACH 无法处理 const boost::ptr_map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2630024/

相关文章:

c++ - 无法加载 PDF 文档

c++ - 关于散列图和术语 C++ 的一些确认

c++ - x64 上 Boost 1.60 和 VS 2013 的链接器错误

c# - 在 gridview 行中应用 foreach 似乎不起作用

php - 使用foreach比较两个表的结果

c++ - 如果我在 C 或 C++ 中执行 `typedef`,我什么时候应该在 typedef'ed 类型的末尾添加 `_t`?

c++ - 如何将A类型的数据写入B类型的格式

c++ - 如何迭代 multi_index

c++ - First Boost 计划

php - foreach、array_map 与 lambda 和 array_map 与静态函数的性能