C++と色々

主にC++やプログラムに関する記事を投稿します。

std::bindとstd::mem_fnはデータメンバも束縛できる

知らなかった。std::bindとstd::mem_fnはデータメンバを束縛して関数風にアクセスすることが出来ます。もちろんそのスコープでアクセス可能なデータメンバに限ります。

#include <functional>
#include <iostream>

struct X {
    int data = 3;
};

int main() {
    X x;
    auto x1 = std::bind(&X::data, x);
    auto x2 = std::mem_fn(&X::data);
    std::cout << x1() << std::endl;
    std::cout << x2(x) << std::endl;
}

実行結果

Start
3
3
0
Finish

[Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ

std::bindとstd::mem_fnの違いですが、std::bindはbind時にインスタンスを束縛した関数オブジェクトを返し、std::mem_fnはインスタンスを第1引数にとる関数オブジェクトを返します。

参考

sscrisk.hatenablog.com