我有一个指针的向量.我想为每个元素调用一个函数,但是该函数需要一个引用.是否有一种简单的方法去解读元素?
例:
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(),boost::bind( &MyClass::ReferenceFn,_1 ) );
}
我可以创建一个肮脏的小包装,需要一个指针,但我认为必须有一个更好的方法?
解决方法
你可以使用boost :: indirect_iterator:
std::for_each( boost::make_indirect_iterator(elements.begin()),boost::make_indirect_iterator(elements.end()),_1 ) );
这将在其运算符*中取消引用两次迭代器.