模板自定义迭代器
Custom Iterator for Template
我目前正在尝试构建一个自定义类的迭代器,它不是特别好:我遇到的问题是,我的自定义类使用模板,看起来像这样:
template<class T>
class MyClass {
private:
T memberVar;
};
现在,MyClass基本上是memberVar的包装器,而memberVar目前是一个map或map的map。现在,我想在另一个类中创建一个迭代器,并使用它做一些有用的事情,即访问我的map或map的map中的元素。
我已经尝试从我的映射转发我的迭代器,当我做像typedef T::iterator iterator;
这样的事情时,它不会给我在MyClass中出现错误,但当我想调用myIterator->first
时,它显然不想对我好,因为现在它不再相信我,这将起作用。老实说,我很惊讶地看到我的typedef实际上是有效的。
现在我的问题是:有没有一个好的方法来做我想做的事?还是我把自己逼入了死角?非常感谢提前!
西蒙更多信息:
在ClassA中,我实例化了一个ClassB,然后它以正确的类型T继承了MyClass。然后,在类a中,我也实例化了一个类c,我给它一个对类b的引用。现在,当我尝试在ClassC中创建myIterator
并尝试执行myIterator->first
时,错误发生了。
对于初学者来说,如果您的类模板总是作为包装器在map
的一些实例化中,我会重复所有的typedef
std::map
,每次使用:
typedef typename T::value_type;
// ...
(typename
是必要的,至少根据标准,但是g++的版本,并使用它编译所有的代码,即使您使用不同的编译器用于最终版本。)
关于myIterator->first
不工作,你必须告诉我知道这条线发生在哪里。如果是a的话,应该没有问题函数,因为函数不应该是直到它被使用(并且由该类型,T
的类型是)已知)。如果它在类模板之外,它应该仍然可以工作;如果您已经正确地声明了变量,例如:
MyClass<std::map<T1, T2> >::iterator myIterator;
(在类模板中,只需使用iterator
作为类型名即可足够了,因为typedef
在范围内)
- 跟随整数索引列表的自定义类迭代器
- 如何在创建自定义迭代器时获得 std::p air 的第一个和第二个?
- 自定义 STL 兼容迭代器,用于迭代 2D 数组类的列
- 无法使用自定义迭代器进行排序
- 比较迭代器会使程序崩溃,而不会在自定义气泡排序实现中出现错误
- 使用迭代器的自定义比较器函数
- 具有迭代器和自定义步长的循环结束条件
- 在C++中使用带有自定义向量的迭代器
- 指向临时对象的自定义迭代器(延迟加载)
- MSVC++ 17 std::copy 期望自定义迭代器的"operator -"
- 如何使用提升范围将自定义迭代器封装在函数中
- 字符串反向迭代器自追加的持久性
- 如何将 std::num_put 与自定义迭代器一起使用?
- 自定义迭代器:如果 a 和 b 的行为不同,如何正确处理距离计算和相等比较
- 迭代器关系运算符出错(带单独链接和迭代器的自定义哈希表)
- std::sort 在我的自定义迭代器上不起作用
- 为自定义数组实现迭代器
- C++自定义惰性迭代器
- 奇怪的编译器错误,说明我的迭代器未定义
- c++迭代器操作符定义