前言
C++中可调用对象主要有:函数、函数指针、lamda表达式、bind创建的对象、function创建的函数和重载了函数调用运算符的类。
可调用对象是什么
可以使用调用运算符来调用的对象或表达式就是可调用对象。
调用运算符就是普通函数调用时,后面跟的那个括号,如()。
可调用对象的使用
1️⃣函数指针
#include<iostream>
#include<string>
#include<string>
using namespace std;
int add(int val)
{
return val + 10;
}
int sub(int val)
{
return val - 10;
}
//方式1
void fun(int v, int(*pf)(int))
{
cout << v << " " << (*pf)(v) << endl;
}
//方式2
typedef int(*pf)(int);//指针pf指向的函数,输入参数为int,返回值为int
void fun2(int v, pf m__fun)
{
cout << v << " " << (m__fun)(v) << endl;
}
int main()
{
fun(10, add); //调用
fun2(10, sub); //函数名就是指针
system("pause");
return 0;
}
2️⃣lamda表达式
#include<iostream>
#include<string>
using namespace std;
int add(int val)
{
return val + 10;
}
int sub(int val)
{
return val - 10;
}
int main()
{
auto add = [](int val){ return val + 10; }; //省略返回值
auto sub = [](int val)->int{ return val - 10; }; //未省略返回值
cout << add(10) << endl; //调用
cout << sub(10) << endl;
system("pause");
return 0;
}
3️⃣bind和function
#include<iostream>
#include<string>
#include<functional>
using namespace std;
int add(int val)
{
return val + 10;
}
int sub(int val)
{
return val - 10;
}
int main()
{
auto func = bind(add,10); //bind对象
function<int(int)> func2 = bind(sub, placeholders::_1);
cout << func() << endl;
cout << func2(10) << endl;
system("pause");
return 0;
}