c++ - 在 STL 包装类中公开普通和常量迭代器
问题描述
假设我有一个类是 stl::list 的包装器,我希望能够使用范围循环:
#include <list>
using std::list;
template <typename T>
class list_wrapper
{
public:
list<T> _list;
typename list<T>::const_iterator begin() { return l.begin(); }
typename list<T>::const_iterator end() { return l.end(); }
typename list<T>::iterator begin() { return l.begin(); }
typename list<T>::iterator end() { return l.end(); }
};
int main(int argc, char** argv)
{
list_wrapper<int> myList;
// insert any number of elements into myList._list
/*
i want to be able to do:
for (auto& i : myList) { ... }
and
for (const auto& i : myList { ... }
*/
return 0;
}
看来我可以使用iterator
s或 const_iterator
s asbegin()
并且end()
不能重载,并带有错误消息:
323070236/source.cpp:16:32: error: ‘typename std::__cxx11::list<T>::iterator wrap_list<T>::begin()’ cannot be overloaded
typename list<T>::iterator begin() { return l.begin(); }
^~~~~
323070236/source.cpp:14:38: error: with ‘typename std::__cxx11::list<T>::const_iterator wrap_list<T>::begin()’
typename list<T>::const_iterator begin() { return l.begin(); }
^~~~~
323070236/source.cpp:17:32: error: ‘typename std::__cxx11::list<T>::iterator wrap_list<T>::end()’ cannot be overloaded
typename list<T>::iterator end() { return l.end(); }
^~~
323070236/source.cpp:15:38: error: with ‘typename std::__cxx11::list<T>::const_iterator wrap_list<T>::end()’
typename list<T>::const_iterator end() { return l.end(); }
我怎样才能同时使用::iterator
和::const_iterator
在这里?
解决方案
推荐阅读
- excel - Web 查询抛出错误:import currenturl 不匹配导出。您是否错过了模块参考?
- vue.js - 将 esri-loader 导入 nativescript
- python - Python:无法使用 openpyxl 打开 excel 文件——文件存在并且位置正确
- html - 字段集的内容正在移出图例容器
- blender - 设置复制的原始 uv 球体的颜色
- android - 用户是否有可能必须按下文件而不是单击以在 action_get_content 中选择它?
- javascript - 使rank输入增减一个数字并停止
- python - 无法导入基于 FFmpeg 的 MediaPlayer
- ruby-on-rails - S3 上的“path_for”ActiveStorage 附件
- android - 每次遇到 RuntimeException、TransformException、ArgumentException 时,我都需要重建项目