我有仿函数,如下所示:
struct Functor{
//Global statistics for all objects seen;
Statistics stats;
Object operator( const Object & obj) const
{
//Copy Object
Object tmp = obj;
compute(tmp);
return tmp;
}
void compute( Object & obj );
//Compute on Object & store in Object
:
:
stats += obj; <---compute stats about the object itself.
}
}
函子以下列方式与boost::transform_iterator一起使用:
SomeDataStructure ds;
boost::transform_iterator< Functor, SomeDataStructure::iterator > iBegin,iEnd;
iBegin = boost::make_transform_iterator( ds.begin(),Functor() );
iEnd = boost::make_transform_iterator( ds.end(),Functor() );
AnotherMethod(iBegin,iEnd);
关于上面的代码,我有两个问题:
1) Functor 按值传递给迭代器。因此,即使我使用以下代码,我也无法从仿函数中提取任何值:
iBegin.functor().stats;
有没有更好的方法来做到这一点?
2) 函子通常填充 Object 类型的不完整对象。即计算对象的属性并将其存储回对象中。operator() 需要一个来自 transform_iterator 类内部的 const 对象。目前,我制作了对象的副本并填充并返回它。我想摆脱这个不必要的副本,那么有什么办法吗?
PS:也欢迎替代解决方案。