摘要:本文主要介绍了C++零基础教程之std:function函数包装器,通过具体的内容向大家展现,希望对大家C++开发的学习有所帮助。
本文主要介绍了C++零基础教程之std:function函数包装器,通过具体的内容向大家展现,希望对大家C++开发的学习有所帮助。
前言
C++中可调用对象的虽然都有一个比较统一的操作形式,但是定义方法五花八门,这样就导致使用统一的方式保存可调用对象或者传递可调用对象时,会十分繁琐。C++提供了std::function和std::bind统一了可调用对象的各种操作。不同类型可能具有相同的调用形式。使用前记得加上functional头文件。
包装普通函数
#include <iostream>
#include <string>
#include <functional>
using namespace std;
int Max(int a, int b)
{
return a > b ? a : b;
}
void print()
{
cout << "无参无返回值" << endl;
}
int main()
{
function<int(int, int)> funMax(Max);
cout << funMax(1, 2) << endl;
function<void()> funPrint(print);
print();
printData(funMax, 1, 2);
return 0;
}
包装类的静态方法
#include <iostream>
#include <string>
#include <functional>
using namespace std;
class Test
{
public:
static void print(int a, int b)
{
cout << a + b << endl;
}
void operator()(string str)
{
cout << str << endl;
}
operator FuncPTR()
{
return print;
}
};
int main()
{
//包装类的静态方法
function<void(int, int)> sFunc = Test::print;
sFunc(1, 2);
return 0;
}
包装仿函数
#include <iostream>
#include <string>
#include <functional>
using namespace std;
class Test
{
public:
void operator()(string str)
{
cout << str << endl;
}
};
int main()
{
//包装仿函数
Test test;
function<void(string)> funTest = test;
test("仿函数");
return 0;
}
包装转换成函数指针的对象 (operator的隐式转换)
#include <iostream>
#include <string>
#include <functional>
using namespace std;
using FuncPTR = void(*)(int, int);
class Test
{
public:
static void print(int a, int b)
{
cout << a + b << endl;
}
operator FuncPTR()
{
return print;
}
};
int main()
{
//包装转换成函数指针的对象 (operator的隐式转换)
Test object;
function<void(int,int)> funOPE = object;
funOPE(2, 3);
return 0;
}
我是小职,记得找我
✅ 解锁高薪工作
✅ 免费获取基础课程·答疑解惑·职业测评
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号