J'ai un vecteur de pointeurs. Je voudrais appeler une fonction pour chaque élément, mais cette fonction prend une référence. Existe-t-il un moyen simple de déréférencer les éléments?Utiliser for_each et boost :: bind avec un vecteur de pointeurs
Exemple:
MyClass::ReferenceFn(Element & e) { ... }
MyClass::PointerFn(Element * e) { ... }
MyClass::Function()
{
std::vector< Element * > elements;
// add some elements...
// This works, as the argument is a pointer type
std::for_each(elements.begin(), elements.end(),
boost::bind(&MyClass::PointerFn, boost::ref(*this), _1));
// This fails (compiler error), as the argument is a reference type
std::for_each(elements.begin(), elements.end(),
boost::bind(&MyClass::ReferenceFn, boost::ref(*this), _1));
}
je pouvais créer un petit emballage sale qui prend un pointeur, mais je me suis dit qu'il devait y avoir une meilleure façon?
Y a-t-il une raison pour laquelle vous utilisez 'boost :: ref (* this)'? Je viens d'utiliser: boost :: bind (& MyClass :: ReferenceFn, this, _1) et ça marche bien. –