STL勉強中

ようやくプログラミング言語C++に目を通した。
さっそくSTLが使いたくなったので練習中。
そして嵌った罠について。

Functorに値を保持して後で使いたい↓

#include <vector>
#include <iostream>
#include <algorithm>
#include <functional>

class Functor
{
  public:
    Functor()
    : m_sum(0)
    {
    };

    void operator()(int n){
      m_sum+=n;
    }

    int get(){ return m_sum; };
  private:
    int m_sum;
};

int main(void)
{
  std::vector<int> values;
  for(int i=0; i<10; i++){
    values.push_back(i);
  };

  Functor func;


  std::for_each(values.begin(), values.end(), func);
  std::cout << func.get() << std::endl; // 0 が返る

  // 
  std::for_each(values.begin(), values.end(),
    std::bind1st(
      std::mem_fun(&Functor::operator()), &func));
  std::cout << func.get() << std::endl; // OK

  return 0;
}

for_eachが値渡しだと気付けば当然ですか。
というかもはやFunctorでは無くて単なるメンバ関数渡しですな。
Functorとメンバ関数渡しの使い分けについて学んだ。