Шаблон получения контейнера в качестве аргумента

0

Я делаю шаблон, который представляет контейнер с фильтром. Он будет содержать все методы, которые должен иметь контейнер, но все методы будут работать с этим фильтром. Так, например, если фильтр равен >1 тогда begin() вернет первый элемент, подходящий для этого фильтра. Я хотел бы спросить, правильна ли эта декларация шаблона или как она должна выглядеть? Должен ли он быть шаблоном в шаблоне или?

template<typename Container,class Filter>
class filtered_cont{
//methods working with container
}
  • 0
    Это может быть задание для наследования filter_cont, полученного из контейнера. Он может быть шаблоном в Filter, таким образом, он идет концептуально, только вещи, ожидающие, что Filter_cont может работать с этим, поэтому нет никакого способа принудительно установить, что это будет контейнер (кроме ошибок времени компиляции, которые никоим образом не предполагают этого ( при условии, что вы не ставите статическое утверждение и не проверяете наличие каждого метода)))
  • 0
    Выглядит хорошо Вы можете обрабатывать фильтр аналогично тому, как распределители обрабатываются в стандартной библиотеке.
Теги:
templates

1 ответ

0

Если единственное, что вы меняете, это итераторы, возвращаемые функциями begin() и end(), я бы не стал связываться с контейнерами... оставьте их, просто создайте вспомогательные функции, которые берут контейнеры и фильтры и возвращают ваш новый итератор:

template<typename Container, typename Predicate>
magic_it filter_begin(Container aContainer, Predicate p) { /.../  return magic ; }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню