在组织我的c ++代码时,我发现将迭代器声明并实现为内部类,并结合所有方法,大大降低了可读性并使代码混淆。鉴于父类和迭代器类都有单独的模板参数,还有其他选择吗?
template<class A, class B>
class parent
{
template<class C>
class iter_base : iterator<std::forward_iterator>
{
// define all functions here.
};
};
基本上我想在另一个文件中定义迭代器函数。
答案 0 :(得分:0)
这是我曾经写过的代码的一部分:
template <typename Btree_Type>
class btree_iterator_base;
class btree
{
public:
using iterator = btree_iterator_base<btree>;
using const_iterator = btree_iterator_base<const btree>;
private:
template <typename Btree_Type>
friend class btree_iterator_base;
iterator begin();
iterator end();
const_iterator begin() const;
const_iterator cbegin() const;
iterator lower_bound(key_type key);
const_iterator lower_bound(key_type key) const;
std::pair<iterator, bool> insert(const value_type & value);
// and so on
};
template <typename Btree_Type>
class btree_iterator_base
{
public:
using value_type = btree::value_type;
friend class btree;
btree_iterator_base() : /* initializers */ { }
// more code
private:
// to be called from btree::begin() and so on
btree_iterator_base(leaf_ptr leaf, uint16_t entry_in_leaf)
{
// code
}
// more code
};
auto btree::begin() -> iterator
{
leaf_ptr ptr(*this, header().m_first_leaf);
return iterator(ptr, 0);
}
我应该继承自std :: iterator,但这很短 实验代码,我变得草率。
我对一组压缩的int有类似的结构代码。