单独文件中的C ++内模板类

时间:2015-12-25 03:36:43

标签: c++ iterator

在组织我的c ++代码时,我发现将迭代器声明并实现为内部类,并结合所有方法,大大降低了可读性并使代码混淆。鉴于父类和迭代器类都有单独的模板参数,还有其他选择吗?

template<class A, class B>
class parent
{ 
   template<class C>
   class iter_base : iterator<std::forward_iterator>
   {
     // define all functions here.
   };
};

基本上我想在另一个文件中定义迭代器函数。

1 个答案:

答案 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有类似的结构代码。