Типовые определения Boilerplate для STL-совместимого контейнера - PullRequest
6 голосов
/ 28 января 2011

Существует ли в стандартной библиотеке или Boost некоторый базовый класс утилит для заполнения пользовательской последовательности, совместимой с STL, требуемыми typedefs (size_type, value_type и т. Д. ...).Я думаю о чем-то вроде boost :: iterator_facade , но для контейнеров.

Я собирался свернуть свой собственный, но хотел убедиться, что такого не было ужесуществовать.

ОБНОВЛЕНИЕ:

Это базовый класс утилит, который я придумал, на случай, если кто-нибудь найдет его полезным:

template <class C>
class ContainerAdapter
{
public:
    typedef C::value_type value_type;
    typedef C::reference reference;
    typedef C::const_reference const_reference;
    typedef C::const_iterator iterator;
    typedef C::const_iterator const_iterator;
    typedef C::difference_type difference_type;
    typedef C::size_type size_type;

protected:
    typedef C::container_type;
};


// Usage
class MyCustomContainer : public ContainerAdapter< std::vector<int> >
{
...
};

ContainerAdapter просто "повторяет" вложенныйtypedefs нижележащего контейнера пользовательского контейнера.В этом нет ничего особенного.

1 Ответ

1 голос
/ 28 января 2011

, даже если он существует, вам все равно придется typedef typename base::size_type size_type. не похоже, что вы бы много выиграли.

...