У меня есть вектор указателей. Я хотел бы вызвать функцию для каждого элемента, но эта функция принимает ссылку. Есть ли простой способ разыменовать элементы?Использование for_each и boost :: bind с вектором указателей
Пример:
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));
}
я мог бы создать маленький грязный обертку, которая принимает указатель, но я полагал, что должно было быть лучше?
Есть ли причина, по которой вы используете 'boost :: ref (* this)'? Я просто использую: boost :: bind (& MyClass :: ReferenceFn, this, _1), и он отлично работает. –