Ich habe einen Vektor Zeiger. Ich möchte eine Funktion für jedes Element aufrufen, aber diese Funktion nimmt eine Referenz. Gibt es eine einfache Möglichkeit, die Elemente zu dereferenzieren?Verwendung for_each und boost :: bind mit einem Vektor von Zeigern
Beispiel:
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));
}
Ich könnte ein schmutziges kleines Wrapper erstellen, die einen Zeiger nimmt, aber ich dachte, es einen besseren Weg sein?
Gibt es einen Grund, warum Sie 'boost :: ref (* this)' verwenden? Ich benutze einfach: boost :: bind (& MyClass :: ReferenceFn, this, _1) und es funktioniert gut. –