Hy there,Итератор для boost :: variant
Я пытаюсь адаптировать существующий код для boost :: variant. Идея заключается в использовании boost :: variant для гетерогенного вектора. Проблема в том, что остальная часть кода использует итераторы для доступа к элементам вектора. Есть ли способ использовать boost :: variant с итераторами?
Я попытался
typedef boost::variant<Foo, Bar> Variant;
std::vector<Variant> bag;
std::vector<Variant>::iterator it;
for(it= bag.begin(); it != bag.end(); ++it){
cout<<(*it)<<endl;
}
Но это не сработало.
EDIT: Благодарим за помощь! Но в моем дизайне мне нужно получить один элемент из списка и передать его другим частям кода (и это может быть неприятно, поскольку я использую GSL). Идея использования итератора заключается в том, что я могу передать итератор функции, и функция будет работать с данными возврата из этого конкретного элемента. Я не вижу, как это сделать, используя for_each. Мне нужно сделать что-то подобное:
for(it=list.begin(); it!=list.end();++it) {
for(it_2=list.begin(); it_2!=list.end();++it_2) {
if(it->property() != it_2->property()) {
result = operate(it,it_2);
}
}
}
Спасибо!
Усиление :: static_visitor полезно работать с элементами, но не работает, когда класс должен возвращать некоторые данные. Я пробовал использовать итераторы для boost :: ptr_vector>, но что-то вроде этого не получилось: typedef boost :: variant Variant; std :: vector bag; std :: vector :: iterator it; для (это = bag.begin(); это! = Сумка.конец(); ++ it) { cout << (* it) << endl; } –
Ivan
Отредактирована запись, чтобы проиллюстрировать ее использование. –
Большое спасибо. Все еще пытаюсь приспособить концепцию к моему существующему коду при слишком большом изменении. Новое редактирование выше. – Ivan