次のように、カウントを返す関数を持つクラスがあります。
class CTestClass
{
public:
// ...
size_t GetCount()const;
// ...
};
そして、私のプログラムのどこかに、そのクラスのオブジェクトのベクトルがあります。通常のループのように実装された、合計カウント(CTestClass :: GetCount()の結果の合計)を取得する関数があります。
size_t sum = 0;
for(vector<CTestClass>::const_iterator it = v.begin(); it != v.end(); ++it)
{
sum += it->GetCount();
}
標準ライブラリで利用できる機能を利用するようにリファクタリングしたいので、と思いましたaccumulate
。関数オブジェクトを使用して(簡単に)実行できましたが、別のオブジェクトを宣言しなくても実行できるとほぼ確信しています(C ++ 11またはブーストがないため、ラムダはありませんが、 TR1を持っている)。
答えを探しているとき、私はこれらのリソースを見つけましたが、それらは質問を解決しません:
- これはほとんど同じ質問であり、提供される答えはループ、アキュムレートとファンクター、アキュムレートとラムダですが、バインドなどへの未回答の参照があります。
- 同様の質問に対するこの回答では、、、
accumulate
およびplus
を 使用bind
していますが、メンバー関数の代わりにデータメンバーを使用しています。
それで、bindまたは同様のものを使用してこれを行う方法はありますか?