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関数と同じですね。