【问题标题】:Best practice for avoiding code duplication while implementing iterator and const_iterator classes [closed]在实现迭代器和 const_iterator 类时避免代码重复的最佳实践 [关闭]
【发布时间】:2016-11-08 13:39:27
【问题描述】:

在实现 iteratorconst_iterator 或类似的类对时,避免代码重复的最佳做法是什么?

  • 是否通常使用大量的 const_cast 来根据 const_iterator 实现迭代器?
  • 是否使用某种特征类并最终将 iterator 和 const_iterator 定义为公共模板的不同实例?

这似乎是一个足够常见的问题,需要一个规范的解决方案,但我找不到任何专门讨论这个问题的文章。

【问题讨论】:

  • 对不起,太宽泛了。许多不同的方法。遗产。模板。没有普遍认可的“最佳实践”。每个案例各不相同。
  • 我更喜欢由value_typepointer_typereference_type 参数化的模板类。例如:template <typename PType> class CustomIterator {};typedef CustomIterator<MyClass*> iterator_type;typedef CustomIterator<const MyClass*> const_iterator_type;

标签: c++ constants class-design code-duplication


【解决方案1】:

我没有任何实现迭代器的经验,尽管我认为这与其他项目类似。重构常用代码等

GNU libstdc++'s实现std::vector::iterator

#include <bits/stl_iterator_base_funcs.h>
// ...
template ... class vector : ... {
    typedef __gnu_cxx::__normal_iterator<pointer, vector> iterator;
    typedef __gnu_cxx::__normal_iterator<const_pointer, vector> const_iterator;
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-10
    • 2019-04-03
    • 2011-10-20
    • 2019-03-11
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多