累积容器中元素的成员函数的结果

Mik*_*Mik 5 c++ stl std stl-algorithm

我有一个类,有一个返回计数的函数,如下所示:

class CTestClass
{
public:
    // ...
    size_t GetCount()const;
    // ...
};
Run Code Online (Sandbox Code Playgroud)

在我的程序中的某个地方,我有一个该类对象的向量.我有一个函数来获取总计数(CTestClass :: GetCount()的结果总和),像普通循环一样实现:

size_t sum = 0;
for(vector<CTestClass>::const_iterator it = v.begin(); it != v.end(); ++it)
{
    sum += it->GetCount();
}
Run Code Online (Sandbox Code Playgroud)

我想重构它以使用标准库中的可用设施,我想到了accumulate.我已经能够通过使用一个函数对象(简单)来做到这一点,但我几乎可以肯定它可以在不声明另一个对象的情况下完成(我没有C++ 11或者提升,所以没有lambda,但是我有TR1).
在寻找答案时,我发现了这些资源,但他们没有解决问题:

  • 几乎是同一个问题,提供的答案是循环,累积和仿函数,累积和lambda,但是有一个未解决的绑定引用等.
  • 这回答类似的问题使用accumulate,plusbind,但使用的是数据成员,而不是成员函数.

那么,有没有办法使用bind或类似的东西来做到这一点?

fsc*_*enm 7

我认为以下应该有效:

using namespace std;
using namespace std::tr1;
using namespace std::tr1::placeholders;

accumulate(v.begin(), v.end(), 0,
           bind(plus<size_t>(), _1, bind(&C::GetCount, _2))
);
Run Code Online (Sandbox Code Playgroud)