投稿者 tel | 2011年1月25日

オーバーロードしたメンバ関数をSTLの述語として使う

だいぶ遅いですが、あけましておめでとうございます。
仕事のプログラムで、オーバーロードしたメンバ関数のポインタをfor_eachに渡して処理しようとしたときにはまったのでメモ。

オーバーロードされていない場合は、mem_funでメンバ関数のポインタを渡せばよかったけど、オーバーロードされている場合はmem_fun1_tを使ってあげる必要がある。

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

class Test
{
public:
    void Print(int a) {
        std::cout << a << std::endl;
    }
    void Print() {
        std::cout << b << std::endl;
    }
private:
    int b;
};

int main()
{
    std::vector<int> v;
    
    for(int i = 0; i < 10; i++) {
        v.push_back(i);
    }
    
    Test test;
    //std::for_each(v.begin(), v.end(), std::bind1st(std::mem_fun(&Test::Print), &test));
    std::for_each(v.begin(), v.end(),
        std::bind1st(std::mem_fun1_t<void, Test, int>(&Test::Print), &test));
    
    return 0;
}

STLが自在に使えるようになりたいものです。


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

カテゴリー

%d人のブロガーが「いいね」をつけました。