Hy là,Iterator pour boost :: variante
J'essaie d'adapter un code existant à boost :: variant. L'idée est d'utiliser boost :: variant pour un vecteur hétérogène. Le problème est que le reste du code utilise des itérateurs pour accéder aux éléments du vecteur. Est-il possible d'utiliser boost :: variant avec des itérateurs?
J'ai essayé
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;
}
Mais cela n'a pas fonctionné.
EDIT: Merci pour votre aide! Mais dans ma conception, j'ai besoin d'obtenir un élément de la liste et le passer autour d'autres parties du code (et cela peut être désagréable, car j'utilise GSL). L'idée d'utiliser un itérateur est que je peux passer l'itérateur à une fonction, et la fonction fonctionnera sur les données de retour de cet élément spécifique. Je ne vois pas comment faire ça en utilisant for_each. Je dois faire quelque chose de similaire à cela:
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);
}
}
}
Merci!
Le boost :: static_visitor est bon pour fonctionner sur les éléments, mais ne fonctionne pas lorsque la classe doit retourner des données. J'ai essayé d'utiliser des itérateurs pour boost :: ptr_vector>, mais quelque chose comme ça n'a pas fonctionné: typedef boost :: variant Variante; std :: vecteur sac; std :: vecteur :: iterator it; pour (it = bag.begin(); it! = Sac.fin(); ++ it) { cout << (* it) << endl; } –
Ivan
Modifié l'entrée pour illustrer l'utilisation. –
Merci beaucoup. J'essaie toujours d'adapter le concept à mon code existant sans trop changer. Nouvelle modification ci-dessus. – Ivan