将列表迭代器存储为成员
Store list iterator as member
我有一个遗留库,我目前正在现代化。
该库有一个自定义的列表类,该类在安全性和性能方面存在几个问题。
因此,我想在列表类的引擎盖下使用std::list
。
不幸的是,列表类的 API 在很大程度上依赖于列表中的当前位置。我不想更改该 API,因为这需要使用库在应用程序中进行大量返工和测试。
我试图将列表和具有当前位置的迭代器存储为模板化类的成员变量,但显然不可能将模板化迭代器作为成员变量。
有什么建议可以解决这个问题吗?
这是我的课
template <class T>
class MyList
{
public:
explicit MyList(const T &t)
{
list.push_back(t);
it = list.begin();
}
int size() const { return list.size(); }
void copy(const MyList<T> &orig)
{
list = orig;
}
int insert(MyList<T> *t, MyListBASE::Location where = MyListBASE::AFTER)
{
list.insert(it, t);
return 0;
}
int insert(const T &t, MyListBASE::Location where = MyListBASE::AFTER)
{
list.insert(it, t);
return 0;
}
T *head() { return list.front(); }
T *tail() { return list.back(); }
T *current() { return it; }
T* next() { return std::next(it); }
T* prev() { return std::prev(it); }
protected:
std::list<T>::iterator it; // seems not to be possible
std::list<T> list;
};
std::list<T>::iterator
是(模板参数的(依赖名称。 因此,编译器需要知道iterator
是一个类型而不是一个变量:
typename std::list<T>::iterator it;
将为编译器提供足够的信息来解决问题。
相关文章:
- 访问存储在向量C++中的结构的多态成员
- 如何创建存储指向成员函数的指针的类 (C++)
- 哪些存储了不完整类型的 STL 数据结构可以用作类成员?
- 使用成员函数和存储值定义书籍类
- 指向(数据)成员的指针作为非类型模板参数,例如具有自动存储持续时间/无链接
- 在C++中,如果成员引用在其声明中初始化,为什么需要存储空间?
- 通过放置 new 重用数据成员存储
- 如何将提升正常分发存储为类成员
- C++:将未知类型的对象存储为成员变量的类
- structtm是否将时区信息存储为其数据成员
- 是否值得使用位移在单个字节中存储多个小数据成员?
- 将列表迭代器存储为成员
- 是否有更好的方法来封装成员对象可以访问的共享存储池?
- 流的奇怪问题.不能存储具有特定值的成员变量的对象
- 不从成员函数C 存储返回值认为不良习惯
- 将类成员存储为RapidXML数据类型
- 将未使用的类数据成员存储在磁盘上
- OpenGL/ c++将所有纹理资源作为静态成员存储在一个单独的类中
- 将数据成员存储在堆内存中
- 静态constexpr成员存储