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, строка в примере).
Изменение: просто для уточнения, это был вопрос программирования, с которым я столкнулся. Я не мог придумать ничего разумного/изящного, и поэтому я спрашиваю об этом здесь.
Вы можете сделать свой тип значения итератора таким же вариантом, как Boost Variant.