【问题标题】:How to correctly inherit std::iterator如何正确继承 std::iterator
【发布时间】:2010-04-23 18:09:46
【问题描述】:

伙计们,如果我有如下课程:

template<class T>
class X
{
T** myData_;
public:
class iterator : public iterator<random_access_iterator_tag,/*WHAT SHALL I PUT HERE? T OR T** AND WHY?*/>
{
T** itData_;//HERE I'M HAVING THE SAME TYPE AS MAIN CLASS ON WHICH ITERATOR WILL OPERATE
};
};

问题位于相应行旁边的代码中。
谢谢。

【问题讨论】:

标签: c++ iterator


【解决方案1】:

作为一个起点,你的值类型应该是你的容器所持有的对象的类型。我的猜测是 T 或 T*,您并没有真正提供足够的信息来说明。 See here 解释各种参数的含义。其余的通常可以保留为默认值。

【讨论】:

  • 我知道各种参数的含义,但正如我对 Potatoswatter 所说的那样,我需要知道是否应该将 T 或 T** 放在那里。
  • 作为一个起点,你的值类型应该是你的容器持有的对象的类型。我不想重复我自己,但您仍然没有提供任何关于该类型是什么的线索。
  • 类型是 T*,我认为这从我提供的类声明中很明显。
  • 那么这就是你的答案。 std::iterator&lt;random_access_iterator_tag, T*&gt;
【解决方案2】:

至于第一个问题,应该是迭代器返回的数据类型。大概是T

至于第二个,它完全取决于您的迭代器实际执行的操作,从给出的信息来看,这并不明确或不明显。

注意std::iterator没有为你定义任何操作,它只定义了一些你可以继承的typedefs。

【讨论】:

  • 这正是我感兴趣的。我知道 std::iterator 没有为我定义任何东西,但为了正确定义这些 typedef,我必须知道我应该把什么作为类型.
【解决方案3】:

除非你真的想学习这些东西,否则我建议使用 Boost.Iterator

【讨论】:

  • Boost.Iterator 并没有真正阻止您学习任何东西,除了如何正确处理各种运算符。在正确实现迭代器之前,您仍然需要了解迭代器的工作原理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-30
  • 2010-11-17
  • 2011-05-03
  • 2011-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多