c++ bind 函数参数

创建日期: 2024-12-12 20:08 | 作者: 风波 | 浏览次数: 16 | 分类: C++

来源: https://www.geeksforgeeks.org/bind-function-placeholders-c/ 参考: https://en.cppreference.com/w/cpp/utility/functional/placeholders

// C++ code to demonstrate bind() and
// placeholders
#include <iostream>
#include <functional> // for bind()
using namespace std;

// for placeholders
using namespace std::placeholders;

// Driver function to demonstrate bind()
void func(int a, int b, int c)
{
    cout << (a - b - c) << endl;
}

int main()
{
    // for placeholders
    using namespace std::placeholders;

    // Use of bind() to bind the function
    // _1 is for first parameter and assigned
    // to 'a' in above declaration.
    // 2 is assigned to b
    // 3 is assigned to c
    auto fn1 = bind(func, _1, 2, 3);

    // 2 is assigned to a.
    // _1 is for first parameter and assigned
    // to 'b' in above declaration.
    // 3 is assigned to c.
    auto fn2 = bind(func, 2, _1, 3);

    // calling of modified functions
    fn1(10);
    fn2(10);

    return 0;
}

Properties of Placeholders

1. The position of the placeholder determines the value position in the function call statement

// C++ code to demonstrate placeholder
// property 1
#include <iostream>
#include <functional> // for bind()
using namespace std;

// for placeholders
using namespace std::placeholders;

// Driver function to demonstrate bind()
void func(int a, int b, int c)
{
    cout << (a - b - c) << endl;
}

int main ()
{
    // for placeholders
    using namespace std::placeholders;

    // Second parameter to fn1() is assigned
    // to 'a' in fun().
    // 2 is assigned to 'b' in fun
    // First parameter to fn1() is assigned
    // to 'c' in fun().
    auto fn1 = bind(func, _2, 2, _1);

    // calling of function
    cout << "The value of function is : ";
    fn1(1, 13);

    // First parameter to fn2() is assigned
    // to 'a' in fun().
    // 2 is assigned to 'b' in fun
    // Second parameter to fn2() is assigned
    // to 'c' in fun().
    auto fn2 = bind(func, _1, 2, _2);

    // calling of same function
    cout << "The value of function after changing"
        " placeholder position is : ";
    fn2(1, 13);

    return 0;
}

In the above code, even though the position of 1 and 13 were the same in a function call, the change in the position of placeholders changed the way the function was called.

2. The number of placeholders determines the number of arguments required to pass in the function.

We can use any no. of placeholders in the function call statement (obviously less than the maximum number of arguments). The rest values are replaced by the user-defined default values.

// C++ code to demonstrate placeholder
// property 2
#include <functional> // for bind()
#include <iostream>
using namespace std;

// for placeholders
using namespace std::placeholders;

// Driver function to demonstrate bind()
void func(int a, int b, int c)
{
    cout << (a - b - c) << endl;
}

int main()
{
    // for placeholders
    using namespace std::placeholders;

    // 1 placeholder
    auto fn1 = bind(func, _1, 2, 4);

    // calling of function with 1 argument
    cout << "The value of function with 1 "
            "placeholder is : ";
    fn1(10);

    // 2 placeholders
    auto fn2 = bind(func, _1, 2, _2);

    // calling of function with 2 arguments
    cout << "The value of function with 2"
            " placeholders is : ";
    fn2(13, 1);

    // 3 placeholders
    auto fn3 = bind(func, _1, _3, _2);

    // calling of function with 3 arguments
    cout << "The value of function with 3 "
            "placeholders is : ";
    fn3(13, 1, 4);

    return 0;
}
16 浏览
0 评论