有时,我们需要根据需要操纵函数的操作,即将一些参数更改为default等。将函数预定义为具有默认参数会限制函数的通用性,并迫使我们使用默认参数,并且也使用具有相似值的参数每一次。从C++ 11开始,bind函数的引入使此任务更加容易。
bind()如何工作?
在占位符的帮助下绑定函数,有助于操纵函数要使用的值的位置和数量,并根据所需的输出修改函数。
什么是占位符?
占位符是命名空间,它控制值在函数的位置。它们由_1,_2,_3表示…
// C++ code to demonstrate bind() and
// placeholders
#include
#include // 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;
}
输出:
5
-11
在上面的代码中,bind()修改了函数的调用以采用1个参数,并返回了所需的输出。
占位符的属性
1.占位符的位置确定函数调用语句中的值位置
// C++ code to demonstrate placeholder
// property 1
#include
#include // 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;
}
输出:
The value of function is : 10
The value of function after changing placeholder position is : -14
在上面的代码中,即使在函数调用中1和13的位置相同,占位符位置的变化也改变了函数的调用方式。
2.占位符的数量确定传递函数所需的参数数量
我们可以使用任何数字。函数调用语句中的占位符数量(显然小于参数的最大数量)。其余值将替换为用户定义的默认值。
// C++ code to demonstrate placeholder
// property 2
#include
#include // 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;
// 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;
}
输出:
The value of function with 1 placeholder is : 4
The value of function with 2 placeholders is : 10
The value of function with 3 placeholders is : 8
在上面的代码中,显然没有。的占位符等于调用该函数所需的参数数量。函数的绑定由占位符的数量和位置指示。
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。