C++ bind関数とは?基本と実践的な使い方を解説

C++において、bind関数は、関数オブジェクトを作成し、関数の引数を特定の値にバインドしたり、インスタンスのメンバ関数をそのインスタンスにバインドしたりするためのものです。bind関数は、関数オブジェクトのカリー化、部分適用、遅延バインディングなどの機能を実現するために使用できます。

bind 関数の基本的な使い方は以下の通りです:

#include <functional>

void foo(int a, int b, int c) {
    // do something
}

int main() {
    // 使用 bind 函数将参数绑定到指定的值
    auto func = std::bind(foo, 1, 2, std::placeholders::_1);
    
    // 调用 func 时,会将第三个参数传递给 foo 函数
    func(3);
    
    return 0;
}

上記のコードでは、std::placeholders::_1 は第3引数を遅延バインドすることを示し、func(3) を呼び出すと、引数3をfoo関数に渡すことになります。

上記の使用法以外に、bind関数は指定したインスタンスにメンバー関数をバインドするためにも使用でき、関数オブジェクトの遅延呼び出しを実現することができます。

#include <functional>

class MyClass {
public:
    void foo(int a, int b) {
        // do something
    }
};

int main() {
    MyClass obj;
    
    // 使用 bind 函数将成员函数绑定到指定实例上
    auto func = std::bind(&MyClass::foo, &obj, std::placeholders::_1, std::placeholders::_2);
    
    // 调用 func 时,会调用 obj.foo(1, 2)
    func(1, 2);
    
    return 0;
}

この例では、&MyClass::foo は、MyClassクラスのfoo関数をバインドしており、&obj はobjインスタンスにバインドされていることを表します。func(1, 2)を呼び出すと、obj.foo(1, 2)が呼び出されます。

bannerAds