Перебирать разные типы коллекций в классе

0
class MyClass {
    std::vector<int> vi;
    std::vector<string> vs; 
}

Я хотел бы перебрать все коллекции в MyClass с помощью одного итератора, т.е. Выполнить итерацию через все vi, а затем через все vs. vs и vi не иметь отношения 1:1 (поэтому я не могу используйте итерационный подход на основе кортежа). Это был вопрос программирования, с которым я столкнулся.

Шаблон проектирования Iterator работает с коллекциями того же типа, абстрагируя доступ из внутреннего представления. Его интерфейс - это полезная вещь для подражания для этой проблемы, но разница типов между коллекциями - это то, что мне трудно.

Мне нравится подходить к проблеме с точки зрения использования.

MyClass mc; 
... // push elements into mc
for( MyClassIterator   it = mc.begin();
                       it != mc.end();
                       it++)
{
   // *it can be either an int or a string
   // operator * for the iterator cannot return a common type! :(
}

Я даже не уверен, как думать о дизайне для MyClassIterator из-за разных типов в коллекциях (int, строка в примере).

Изменение: просто для уточнения, это был вопрос программирования, с которым я столкнулся. Я не мог придумать ничего разумного/изящного, и поэтому я спрашиваю об этом здесь.

Теги:
iterator

1 ответ

1

Вы можете сделать свой тип значения итератора таким же вариантом, как Boost Variant.

  • 0
    Интересно - вы говорите, что я создаю итератор-посетитель для этого класса?
  • 0
    Да, это более общее решение, чем, скажем, определение типа кортежа и заполнение одного или другого из его полей.

Ещё вопросы

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