gpt4 book ai didi

c++ - 使用 boost::any_range 时出现非常量引用错误的无效初始化

转载 作者:行者123 更新时间:2023-11-28 03:26:49 24 4
gpt4 key购买 nike

我正在编写一个包装器类,它抽象了 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'

MyClass::operator[]() 内的 return cb->getValueAtkey[idx]; 处有一个从此处实例化消息

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

最佳答案

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

关于c++ - 使用 boost::any_range 时出现非常量引用错误的无效初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13681211/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com