4

独自のコンテナを定義するときは、たとえば次のように、多数のメンバータイプを提供する必要があります。

    typedef T& reference;
    typedef const T& const_reference;
    typedef T* iterator;
    typedef const T* const_iterator;
    typedef std::size_t size_type;
    typedef std::ptrdiff_t difference_type;
    typedef T value_type;
    typedef T* pointer;
    typedef const T* const_pointer;
    typedef std::reverse_iterator<iterator> reverse_iterator;
    typedef std::reverse_iterator<const_iterator> const_reverse_iterator;

std::iterator<T>自分のイテレータの場合と同様に、継承できる基本クラスのテンプレートはありますか?

4

3 に答える 3

1

これを頻繁に行う必要がある場合は、

template<typename T>
struct container
{
    typedef T& reference;
    typedef const T& const_reference;
    typedef std::size_t size_type;
    typedef std::ptrdiff_t difference_type;
    typedef T value_type;
    typedef T* pointer;
    typedef const T* const_pointer;
};

そして、これを継承します。標準ライブラリでstd::allocatorは、これらすべての typedef を定義しているため、そこから継承すると、技術的には必要なことが行われ、実行時のオーバーヘッドが発生することはありません。ただし、独自のtypedefを作成する方が良いと思います。

于 2011-02-24T14:33:56.810 に答える
0

std::iterator<T>自分のイテレータと同様に、継承できる基本クラス テンプレートはありますか?

いいえ、しかしそれはいい考えです。OTOH、これらの型は派生クラスのテンプレート パラメーターに依存する基本クラスの識別子になるため、コンテナー内からこれらの型を参照するのが難しくなります。それは迷惑になる可能性があります。

于 2011-02-24T14:10:02.303 に答える
0

この特定のニーズには boost::iterator があります。

このチュートリアルで物事が明確になることを願っています http://www.boost.org/doc/libs/1_46_0/libs/iterator/doc/iterator_facade.html#tutorial-example

于 2011-02-24T14:14:33.620 に答える