我正在编写一个抽象的包装类,std::map
std::vector
为此boost::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'
前面有一条instantiated from here
消息在return cb->getValueAtkey[idx];
里面MyClass::operator[]()
我对提升比较陌生,因此无法弄清楚我哪里出错了。任何帮助,将不胜感激。