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



>我正在编写一个抽象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();
}

我正在使用模板化映射类并在其上定义自定义迭代器,使用 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'

前面是return cb->getValueAtkey[idx]; MyClass::operator[]() 处的instantiated from here消息

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

乍一看,你只有一个const operator[](),这称为非常量getValueAtKey()。尝试添加非常量operator[]()或添加常量getValueAtKey()

最新更新