私は次のようなファンクターを持っています:
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.
}
}
functor は次のように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);
上記のコードに関して 2 つの質問があります。
1) Functor は値によって iterator に渡されます。したがって、次のコードを使用しても、ファンクターから値を引き出すことができません。
iBegin.functor().stats;
これを行うより良い方法はありますか?
2) 一般に、ファンクターは Object 型の不完全なオブジェクトを生成します。つまり、オブジェクトの属性を計算し、それをオブジェクトに格納します。operator() は、transform_iterator クラス内からの const オブジェクトを想定しています。現在、オブジェクトのコピーを作成し、それを入力して返します。この不要なコピーを取り除きたいのですが、これを行う方法はありますか?
PS: 代替ソリューションも歓迎します。