std::ptr_fun関数を自作する
関数ポインタアダプタであるstd::ptr_fun関数を自作してみました。
#include <iostream> #include <vector> #include <algorithm> using std::cout; using std::endl; template <class T> class CMyPtrFun { public: CMyPtrFun (const T func) { m_func = func; } template <class U> void operator()(const U& data) { (*m_func)(data); } private: T m_func; }; template <class T> CMyPtrFun<T> myptr_fun(const T func) { return CMyPtrFun<T>(func); } void output (int num) { cout << num << endl; } int main () { std::vector<int> data; data.push_back(10); data.push_back(20); data.push_back(30); std::for_each(data.begin(),data.end(),myptr_fun( output ) ); return 0; }
$ main 10 20 30
できました。
基本的な実装の仕方は自作std::mem_fun_ref関数と同じですね。