0

を所有し、、、、およびメソッドを提供する必要があるクラスがありstd::vectorます。実装の詳細を公開したくない、つまり を使用したくないので、独自の Iterator が必要です。私が理解したように、これが目的です: iterator を取り、それを新しい Iterator タイプ内にラップします -> myは thenになります。begin()end()cbegin()cend()std::vectorboost::iterator_adapterstd::vector<T>::iteratorMyClass::iterator

まず、boost::iterator_adapter についての私の理解は正しいusing const_iterator = const iteratorですか?

    class MyClass {
    public:
        iterator begin();
        // ...
    private:
        using container_t = std::vector;
        container_t<int> container;
    }

    class MyClass::iterator
      : public boost::iterator_adaptor<
            MyClass::iterator                     // Derived
          , container_t<int>::iterator            // Base
          , boost::use_default                    // Value
          , boost::random_access_traversal_tag >  // CategoryOrTraversal
    {
     public:
        iterator()
          : iterator::iterator_adaptor_() {}
        explicit iterator(const iterator::iterator_adaptor_::base_type& p)
          : iterator::iterator_adaptor_(p) {}
     private:
        friend class boost::iterator_core_access;
    };

これはコンパイルできない可能性があります。

4

1 に答える 1