メンバ関数アダプタ std::mem_fun_ref関数
http://www.geocities.jp/ky_webid/cpp/library/025.html
例えばvector
そこでメンバ関数アダプタという物を利用します。
#include <iostream> #include <functional> #include <vector> #include <algorithm> using std::cout; using std::endl; class CSample { public: CSample(int num) { m_num = num; } void output () const { cout << "CSapmle::output m_num = " << m_num << endl; } private: int m_num; }; int main () { std::vector<CSample> v; for(int i=0;i<5;++i) { v.push_back(CSample(i)); } std::for_each(v.begin(),v.end(),std::mem_fun_ref( &CSample::output )); return 0; }
$ main CSapmle::output m_num = 0 CSapmle::output m_num = 1 CSapmle::output m_num = 2 CSapmle::output m_num = 3 CSapmle::output m_num = 4
std::mem_fun_refというものを使い、メンバ関数のポインタを渡します。
多分処理的には何も難しいことはしていないと思います。
ちなみに上記のコードはVC6.0だとコンパイルが通らないようです。
std::mem_fun_ref( reinterpret_cast<int (CSample::*)(void)>( &CSample::output ) )
とこのように明示的にキャストを書かなければならない上に、戻り値の無いメンバ関数ポインタを指定できないそうです。今のところVC6.0を使うことはないですが注意が必要ですね。