使用boost :: any_range时,非const引用错误的初始化无效

时间:2012-12-03 10:22:03

标签: c++ boost iterator

我正在编写一个抽象std::map std::vectorboost::unordered_map的包装类,为此,我定义了封装每个容器的单独容器类和一个抽象基类。这些课程很常见。另一个名为MyWrapper的类重载[]运算符,并调用抽象基类的指针上的方法来获取值。它还从boost::any_range创建一个自定义迭代器来迭代值。这是我的包装和基类:

class MyClass{

    ContainerBase* cb;

//my custom iterator
    typedef boost::any_range<valT,boost::bidirectional_traversal_tag,
    valT&,std::ptrdiff_t>::iterator iterator;

// other methods and costructor
    const valT& operator[](size_t idx) const{
      return cb->getValueAtkey[idx];
    }

    iterator begin(){
     return cb->getbegin(); 
   }
}

class ContainerBase{
    //other methods
    virtual valT& getValueAtKey(size_t); //calls the underlying container's subscript 
    virtual MyClass::iterator getbegin();
}

我正在使用模板化的map类并使用boost::transform_iterator在其上定义自定义迭代器来迭代键值,如下所示:

template<class MapType>     //std::map or boost::unordered_map 
class  MapDerived : public ContainerBase{        
 MapType cont;
 typedef boost::transform_iterator<value_extractor,typename MapType::iterator> value_iterator;
 MyClass::iterator getbegin(){ 
 return MyClasss::iterator(
 boost::make_transform_iterator<value_extractor,typename MapType::iterator>(cont.begin(),value_extractor()
          );      
 }    //similar function for end iterators 
}

我在编译时遇到以下错误:

..boost/range/detail/any_iterator_wrapper.hpp:356: 
error: invalid initialization of non-const reference of type 'valT&' from a temporary of type 'int'

instantiated from here

内的return cb->getValueAtkey[idx];处发出MyClass::operator[]()条消息

我相对较新,因此无法弄清楚我哪里出错了。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

乍一看,您只有一个const operator[](),这会调用非常量getValueAtKey()。尝试添加非const operator[]()或添加const getValueAtKey()