Почему не там никакой интерфейс “Iterable” в STL?

STL C++, кажется, не использует чисто абстрактные базовые классы (иначе интерфейсы) очень часто. Я знаю, что большинство вещей может быть достигнуто с алгоритмами STL или умным шаблонным метапрограммированием.

Но тем не менее, для некоторых вариантов использования (например, в API, если я не хочу быть конкретным относительно типа контейнера, я добираюсь, примерно элементы, которые он содержит), интерфейс следующей формы был бы хорош:

template<typename T> struct forward_iterable {
    struct iterator {
        typedef T  value_type;
        typedef T& reference;
        typedef T* pointer;
        virtual reference operator*() const = 0;
        virtual pointer operator->() const = 0;
        virtual bool operator==(const iterator&) const = 0;
        virtual bool operator!=(const iterator&) const = 0;
        virtual operator const_iterator() const = 0;
        virtual iterator& operator++() = 0;
        virtual iterator  operator++(int) = 0;
    };
    struct const_iterator { ... };  // similar, but with const references

    virtual iterator begin() = 0;
    virtual const_iterator begin() const = 0;
    virtual iterator end() = 0;
    virtual const_iterator end() const = 0;
};

Если бы контейнеры STL реализуют этот класс как невиртуальную функцию, это, по-моему, не влияло бы на производительность (если я использую контейнеры непосредственно и не через этот интерфейс). Итак, почему там так мало "интерфейсов" в STL? Или я просто думаю слишком много в терминах "Java"?

10
задан summentier 18 October 2010 в 12:12
поделиться