C++参数绑定bind

std::bind函数接受一个可调用对象以及参数列表来生成一个新的可调用对象,从而达到更改参数顺序以及参数数量的目的。传递给std::bind函数的占位符参数和返回的可调用对象的参数一一对应。

void printValue(int value1,int value2,int value3)
{
    cout << value1 << endl;
    cout << value2 << endl;
    cout << value3 << endl;
}


void testFunc(std::function printFunc, int value1, int value2)
{
    printFunc(value1,value2);
}

int main()
{
    auto newFunc1 = std::bind(printValue, placeholders::_1, placeholders::_2, 123);
    testFunc(newFunc1,111,222);//111 222 123

    auto newFunc2 = std::bind(printValue, placeholders::_1, 123, placeholders::_2);
    testFunc(newFunc2, 111, 222);//111 123 222 
    system("pause");
}

默认情况下,bind的那些不是占位符的参数被拷贝到bind返回的可调用对象中,如果希望以引用方式传递可以使用ref函数。

void writeValue(string& value)
{
    value = "hello world!";
}


void testFunc(std::function writeFunc)
{
    writeFunc();
}

int main()
{
    string value="hi";

    auto newFunc1 = std::bind(writeValue, value);
    testFunc(newFunc1);
    cout << value << endl;//hi

    auto newFunc2 = std::bind(writeValue, ref(value));
    testFunc(newFunc2);
    cout << value << endl;//hello world!
    system("pause");
}

你可能感兴趣的:(C++参数绑定bind)