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とメンバ関数渡しの使い分けについて学んだ。