【发布时间】:2012-07-30 01:52:44
【问题描述】:
我有如下仿函数:
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:也欢迎替代解决方案。
【问题讨论】: