C++包装器(functional&&bind)

Kafka延迟队列实现方案全解析 $ \text{时间轮} = \text{环形数组} + \text{分层设计} $$需要补充代码实例或特定场景的优化方案可进一步细化,此大纲已覆盖核心技术路径。 阅读详情

为什么要有包装器

我们现在学过的可调用对象太多了:

  1. 函数指针
  2. 仿函数对象
  3. lambda表达式对象

ret = func(x);

这里的func可能是面的任意一种

template<class F, class T>
T useF(F f, T x)
{
	static int count = 0;
	cout << "count:" << ++count << endl;
	cout << "count:" << &count << endl;
	return f(x);
}
double f(double i)
{
	return i / 2;
}
struct Functor
{
	double operator()(double d)
	{
		return d / 3;
	}
};
int main()
{
	// 函数名
	cout << useF(f, 11.11) << endl;
	// 函数对象
	cout << useF(Functor(), 11.11) << endl;
	// lamber表达式
	cout << useF([](double d)->double { return d / 4; }, 11.11) << endl;
	return 0;
}

上面的T useF(F f, T x)的f用来接收一个可调用对象,x用来接收一个值,函数内定义了一个静态变量,初始化为0,每次调用这个这个函数就会把静态变量++;

main函数分别传入三种可调用对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uDDo6LRB-1670438758976)(https://massachusetts-pubic.oss-cn-guangzhou.aliyuncs.com/%E5%9B%BE%E5%BA%8A/202210102133749.png)]

可以发现:同一个静态变量三次++,一直都是1,三次的地址也不同,所以这个静态变量是有三份的,也就是说,函数重载了三份。

所以说,编译器在推演的时候,因为F可能是三种类型的调用,所以就要实例化三份useF函数

那有没有办法让这里useF只实例化成一份呢?

C++11为了将可调用类型统一,就提出了包装器概念

function包装器

function包装器 也叫作适配器。C++中的function本质是一个类模板,也是一个包装器。

std::function在头文件

类模板原型:

template <class T> function; // undefined

template <class Ret, class... Args>
class function<Ret(Args...)>;

模板参数说明:

  • Ret: 被调用函数的返回类型
  • Args…:被调用函数的形参

使用方法:

function<int(int, int)> func1 = f;

使用的时候我们可以把它看成是一个类模板,模板参数用这样一个特殊的方式

#include <functional>
int f(int a, int b)
{
	return a + b;
}
struct Functor
{
public:
	int operator() (int a, int b)
	{
		return a + b;
	}
};
class Plus
{
public:
	static int plusi(int a, int b)
	{
		return a + b;
	}
	double plusd(double a, double b)
	{
		return a + b;
	}
};
int main()
{
	// 函数名(函数指针)
	std::function<int(int, int)> func1 = f;
	cout << func1(1, 2) << endl;
	// 函数对象
	std::function<int(int, int)> func2 = Functor();
	cout << func2(1, 2) << endl;
	// lamber表达式
	std::function<int(int, int)> func3 = [](const int a, const int b){return a + b; };
	cout << func3(1, 2) << endl;
	// 类的成员函数
    //静态成员函数——没有this指针
	std::function<int(int, int)> func4 = &Plus::plusi;//可以不写&
	cout << func4(1, 2) << endl;
    //非静态——有this指针
	std::function<double(Plus, double, double)> func5 = &Plus::plusd;//包装的时候必须有一个this的位置(必须写&)
	cout << func5(Plus(), 1.1, 2.2) << endl;//通过匿名对象调用成员函数
	return 0;
}

赋值nullptr&bool判断

一个function对象可以不进行显式初始化,

也可以用nullptr进行初始化,

甚至可以用nullptr对一个已经定义的对象进行赋值,

但显然初始化为空的function对象是不允许调用的(强制调用,内部会抛出异常)

所以,在调用之前需要进行检测,好在function内提供了operator bool,

直接对一个function对象进行if(),即可判断此包装器是否可以调用

int main()
{
    std::function<int(int, int)> foo, bar;

    foo = [](int, int) -> int { return 0; }; // 用lamabda表达式进行赋值
    bar = nullptr; // 赋值为空

    foo.swap(bar); // 同类function支持swap

    std::cout << "foo is " << (foo ? "callable" : "not callable") << ".\n";
    std::cout << "bar is " << (bar ? "callable" : "not callable") << ".\n";

    return 0;
}

运行结果:

foo is not callable.
bar is callable.

包装器的使用场景:字符串对方法的索引

我们可以在如下这道题中体会一下包装器的使用

150. 逆波兰表达式求值 - 力扣(LeetCode)

这道题会给一个vector每个元素都是一个字符串,每个字符串存一个数字或一个运算符

这些数字与符号排列组合成的表达式并非我们平时使用的如:(1+2)*3(中缀表达式)

而是1 2 + 3 *(后缀表达式,也称逆波兰表达式)

要计算下面的逆波兰表达式,

  • 只需要从前向后将值依次取出值,放入一个栈中

  • 当遇到运算符,就把栈顶的两个元素取出,进行当前运算符的运算

如:当前栈中存入的元素有1 2,字符串读到了+,则取出栈顶的1 2,进行1+2

的运算

  • 把运算得数放到栈中

  • 读完整个字符串,栈顶的元素就是运算结果

思路很简单,但是会遇到一个问题:如何把一个“+”的字符串变为一个加法算呢?

当然,我们可以像这样

if(strcmp(str,”+”)==0)
{
    st.push(a+b);
}
else if...

把每个运算符都设置一个分支

但是写起来多少是有一点恶心的

class Solution {
public:
    int evalRPN(vector<string>& tokens) {
        stack<int> stk;
        int n = tokens.size();
        for (int i = 0; i < n; i++) {
            string& token = tokens[i];
            if (isNumber(token)) {
                stk.push(atoi(token.c_str()));
            } else {
                int num2 = stk.top();
                stk.pop();
                int num1 = stk.top();
                stk.pop();
                switch (token[0]) {
                    case '+':
                        stk.push(num1 + num2);
                        break;
                    case '-':
                        stk.push(num1 - num2);
                        break;
                    case '*':
                        stk.push(num1 * num2);
                        break;
                    case '/':
                        stk.push(num1 / num2);
                        break;
                }
            }
        }
        return stk.top();
    }

    bool isNumber(string& token) {
        return !(token == "+" || token == "-" || token == "*" || token == "/");
    }
};

//作者:LeetCode-Solution
//链接:https://leetcode.cn/problems/evaluate-reverse-polish-notation/solution/ni-bo-lan-biao-da-shi-qiu-zhi-by-leetcod-wue9/
//来源:力扣(LeetCode)

我们是否可以用一个map,把字符串和对应的方法联系起来?

map<string,方法类型> opFuncMap = {{”+“,加法运算},{”-“,减法运算}…}

使用的时候就可以:

opFuncMap[str](a,b);

但是问题来了,如果方法用一个lambda表达式来写,那模板参数的类型接收什么?

有四种运算,也就是个lambda表达式,对应四个类型,有没有一个类型能接收这四种lambda表达式呢?

那就是包装器

包装方法:

map<string, function<int(int, int)>> opFuncMap =
{
{“+”,[](long long x,long long y) {return x + y; }},
{“-”,[](long long x,long long y) {return x - y; }},
{“*”,[](long long x,long long y) {return x * y; }},
{“/”,[](long long x,long long y) {return x / y; }}
};

使用方法:

st.push(stoi(str));

多少又有点多态的味道了,虽然说这个语法长相越来越不像C++了,但是用着爽啊

题解:

class Solution {
public:
    long long evalRPN(vector<string>& tokens) {
        stack<long long> st;
        map<string, function<int(int, int)>> opFuncMap =
        {
            {"+",[](long long x,long long y) {return x + y; }},
            {"-",[](long long x,long long y) {return x - y; }},
            {"*",[](long long x,long long y) {return x * y; }},
            {"/",[](long long x,long long y) {return x / y; }}
        };
        for (auto& str : tokens)
        {
            if (opFuncMap.count(str))//是操作符
            {
                long long right = st.top();
                st.pop();
                long long left = st.top();
                st.pop();
                st.push(opFuncMap[str](left, right));
            }
            else//是操作数
            {
                st.push(stoi(str));
            }
        }
        return st.top();
    }
};

虽然说代码没变多短,但是如果学会了map、包装器、lambda表达式,下面这段代码的封装性更强,可读性是更高;

相比C语言的面向过程,C++11新增的的这些语法把C++这门语言的面向对象更深化了几分。

bind

情景

我们看如下这种情况

#include <functional>
#include <map>
int f(int a, int b)
{
	return a + b;
}
struct Functor
{
public:
	int operator() (int a, int b)
	{
		return a + b;
	}
};
class Plus
{
public:
	double plusd(double a, double b)
	{
		return (a + b);
	}
private:
};
int main()
{
	map<string, std::function<int(int, int)>> opFuncMap = {
		{"普通函数指针",f},
		{"函数对象",Functor()},
		//{"成员函数指针", &Plus::plusd}//无法匹配
	};
	return 0;
}

我们想用一个map存储各种可调用类型,

当存到成员函数的时候出现了问题

因为成员函数的参数默认是存在一个this指针的,所以包装器接收的时候就得为这个this指针留位置:

std::function<double(Plus, double, double)> func = &Plus::plusd;

于是就出现了,明明是同一类调用方式,却不能用一个function接收

所以,有没有办法吧那个this指针隐藏掉呢?

概念

image-20221208015709243

std::bind函数是一个函数模板

它就像一个函数包装器(适配器),接受一个可调用对象(callable object),通过将某些参数写死,或者调换参数的顺序,生成一个新的可调用对象

函数原型:

template <class Fn, class... Args>
/* unspecified */ bind (Fn&& fn, Args&&... args);

// with return type (2)
template <class Ret, class Fn, class... Args>
/* unspecified */ bind (Fn&& fn, Args&&... args);

使用方法:

int f_src(int a, int b, int c)
{
    return a * (b - c);
}
int main()
{
    cout << f_src(10, 1, 2) << endl; // 10 * (1 - 2) = -30
    function<int(int, int)> f_dst = bind(f_src, 10, placeholders::_2, placeholders::_1);
    cout << f_dst(2, 1) << endl;     // 10 * (1 - 2) = -30
    return 0;
}

运行结果:

-30

-30

如上,bind的参数:

  • 第一个参数:需要被绑定修改的调用对象(传入函数名)
  • 后面再输入n个参数,n是被绑定函数的参数个数

上面调用f_dst(2, 1);时,参数按照如下方式传递:

  • 2 --> placeholders::_1 --> c
  • 1 --> placeholders::_2 --> b
  • ​ 10 --> a

相当于调用f_src(10, 1, 2);

其中 placeholders::_1, placeholders::_2(_1和_2属于placeholders命名空间域)相当于两个占位参数

如果需要写死的参数是this指针,可以传入一个匿名对象、非匿名对象的指针或者非匿名对象

此时我们就可以通过写死this指针,把绑定后的对象赋给map的function了:

#include <functional>
#include <map>
int f(int a, int b)
{
	return a + b;
}
struct Functor
{
public:
	int operator() (int a, int b)
	{
		return a + b;
	}
};
class Plus
{
public:
	double plusd(double a, double b)
	{
		return (a + b);
	}
private:
};
int main()
{
	map<string, std::function<int(int, int)>> opFuncMap = {
		{"普通函数指针",f},
		{"函数对象",Functor()},
		{"成员函数指针", bind(&Plus::plusd/*函数指针*/, Plus()/*匿名对象*/, placeholders::_1, placeholders::_2)}//绑定返回一个两个参数的调用对象
	};
	return 0;
}
Vue2 - 实现H5人脸识别认证与活体检测功能(纯前端免费方案+微信人脸识别接口)完整源码,vue微信公众号网页h5端人脸识别功能人脸核身(微信方案提供后端spring boot+thinkphp) vue人脸识别插件,vue, h5人脸识别, 微信公众号, 活体检测, 人脸核身,人脸登录、人脸识别,VUE项目-H5端人脸识别功能实现,免费h5人脸识别插件方案,微信公众号H5网页实现人脸识别,vue人脸核身,Vue H5活体检测认证,人脸认证张嘴摇摇头指引动作,人脸核身 微信原生 H5(微信公众号)vue2调用手机摄像头并实现人脸识别的实现,微信h5人脸识别vue项目,PHP人脸识别,java人脸识别,h5页面,有免费的人脸识别接口吗,用于微信公众号及嵌套在微信浏览器,vue3如何实现人脸识别,微信人脸 阅读详情

相关推荐

【Latex】【附安装文件】Miktex和TexStudio的安装与配置

这代表“构建并运行”,一般来说,我们只需要点这个按钮来运行Latex代码。保存一下代码文件,再运行一次,PDF文件会出现在与代码文件相同的文件夹下。安装完成后,你可能会跳转到一个页面中,你看到这个页面就意味着安装成功了。其实不需要你敲,你只要将下面的代码复制粘贴到你刚刚的文件中即可。成功安装MikTex后,我们需要进行更新,减少后续使用的麻烦。如果懂得将安装路径设置在你想要的盘中,你可以自己设置。双击上文的.exe文件后,你会看到如下画面。如果不懂,为避免不必要的麻烦,请直接点击“

未来就在脚下。 1万+

C++ functional

文章目录std::function std::bad_function_callstd::bindstd::ref std::cref std::reference_wrapperstd::mem_fn 类模板std::function是通用多态函数封装器。 std::function的实例能存储、复制及调用任何可调用函数、 lambda表达式、 bind表达式或其他函数对象,还有指向成员函数指针和指向数据成员指针。 若 std::function 不含目标,则称它为空。调用空std::function的目

123456789 3819

Halcon 算子 select_shape

作用:借助形状特征选择区域; 参数翻译(对应以上参数顺序): 输入区域、 输出满足条件的区域、 输入参数形状特征('anisometry', 'area', 'area_holes', 'bulkiness'等)、 输入参数关系符('and', 'or')、 输入参数下限值(0.0 ≤ Min ≤ 99999.0)、 输入参数上限值(Max >= Min 并且0.0 ≤ Max ≤ 99999.0); 描述: 算子select_shape根据形状特征选择区域,对于...

奔跑的郑的博客 2万+

c++11函数对象:functional

<functional>主要新增了类模板std::function和函数模板std::bind。 std::function是可调用对象的wrapper,它可以包装函数、lambda表达式、bind表达式、函数对象、成员函数指针、成员变量指针。 std::bind也是一个可调用对象的wrapper,它可将一个可调用对象的部分或全部参数绑定为特定的值,它的返回值可以被std::funct...

https://gitee.com/liuyuan185442111/chest-view 2943

K-GAS解读(08)

大众kgas标准,大众及其供应商kgas

m0_51113317的博客 598

25个Prompt去除AI味,让AI写作更像真人

自然语言生成技术飞速发展,如今AI写作已经深度融入内容创作、营销运营和日常办公。但许多用户发现,AI生成的文本常常带着一股“AI味”——句子过于工整、过度总结、细节空洞,导致内容被一眼识破,甚至面临“AI率”过高的尴尬。其实,这种塑料感源于大模型的训练数据与对齐机制,它偏好生成结构完整、逻辑平滑的“安全文本”。要解决这一问题,核心不在于更换工具或复杂调参,而在于掌握提示词工程的底层逻辑:通过限制结构、注入细节、切换视角、打乱顺序等具体指令,引导模型生成更接近人类表达习惯的文本。本文基于实战经验,提供25个可

weixin_26824299的博客 256

# C++之functional库用法整理

# C++之functional库用法整理

ULTRAmanTAROACE的博客 1607

实测昇腾310P跑Qwen3有多慢?手把手带你部署vLLM并记录性能数据

本文实测了昇腾310P在vLLM框架下部署Qwen3模型的性能表现,详细记录了2.5 tokens/s的生成速度及其技术瓶颈。通过环境搭建、基准测试和深度分析,揭示了计算资源利用率不足等关键问题,并提供了实用的优化技巧与监控方案,帮助开发者更好地理解和优化昇腾平台上的大模型部署。

weixin_28724319的博客 887

C++中functional函数和bind的用法

std::function是一个可调用对象包装器,是一个类模板,可以容纳除了类成员函数指针之外的所有可调用对象,它可以用统一的方式处理函数、函数对象、函数指针,并允许保存和延迟它们的执行。std::function对C++中各种可调用实体(普通函数、Lambda表达式、函数指针、以及其它函数对象等)的封装,形成一个新的可调用的std::function对象,简化调用;std::bind可以看作一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来适应原对象的参数列表。

weixin_45717907的博客 949

013 PID参数整定:Ziegler-Nichols法

几年前在调试一台伺服压机,客户要求位置精度±0.01mm,响应时间小于50ms。我按照教科书上的经验值设了P=1.5,I=0.02,D=0.01,结果电机一启动就开始尖叫,位置超调直接干到0.3mm,然后开始震荡,像极了喝醉的舞者。现场工程师看我的眼神,就像在看一个刚毕业的实习生。那次之后我明白了一个道理:PID参数不是靠猜的,也不是靠经验公式硬套的。你需要一个系统的方法,而Ziegler-Nichols法就是那个让你从“瞎调”走向“有章可循”的起点。

m0_50546716的博客 93

人工智能训练师(三级)操作技能考核·自测卷

为您定制了一份。这份试卷严格拆分了“业务分析”、“智能训练”、“智能系统设计”、“培训与指导”四大模块,所有填空题均来源于上一轮整理的。您可以先用它进行“第二步(抛开答案自己填)”,填完后对照末尾的答案速查进行“第一步(补全并运行)”的校验,最后标记错题进行“第三步(针对性重复练习)”。

suny8088的博客 92

C++中关于 <functional> 的使用

你可以使用 std::bind 来绑定函数参数,并创建新的可调用对象。std::bind是 C++11 引入的一个函数适配器,可以将函数及其参数绑定在一起,生成一个新的可调用对象。它可以用于简化函数调用,特别是在需要部分应用或延迟调用的情况下。相比直接调用封装到中的好处在于可以提供更大的灵活性,尤其是在需要动态传递不同可调用对象的场景。以下是一些常见的实践应用示例,展示了封装的优势。// 使用 std::bind 绑定参数// 绑定参数 5// 使用默认参数f1();

shuyuan12346的博客 1263

JeecgBoot passwordChange 任意用户密码重置漏洞复现

​JeecgBoot 框架passwordChange接口存在任意用户密码重置漏洞,未经身份验证的远程攻击者可以利用此漏洞重置管理员账户密码,从而接管系统后台,造成信息泄露,导致系统处于极不安全的状态。

0xSec 2633

<functional>的使用详解

C++ 能够支持类似于现代编程语言中的高阶函数、回调和 lambda 表达式等特性,为你的代码提供更大的灵活性和扩展性!库中最核心的部分,它提供了一种通用的方式来存储和调用任何类型的可调用对象,包括普通函数、成员函数、lambda 表达式、函数对象等。是一个函数模板,它可以将成员函数包装成函数对象,之后可以像调用普通函数一样调用成员函数。是一个模板类,用于存储任意类型的函数或可调用对象,具有一致的调用接口。用于绑定函数的参数,它可以预先提供部分参数,返回一个新的可调用对象。让我们能够更加灵活地处理。

TsuanS13的博客 1894

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C++/C++11中头文件functional的使用

<functional>是C++标准库中的一个头文件,定义了C++标准中多个用于表示函数对象(function object)的类模板,包括算法操作、比较操作、逻辑操作;以及用于绑定函数对象的实参值的绑定器(binder)。这些类模板的实例是具有函数调用运算符(function call operator)的C++类,这些类的实例可以如同函数一样调用。不必写新的函数对象,而仅是组合预定...

网络资源是无限的 2万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C++:27---function模板(functional头文件)

引入 在介绍function之前,先介绍下面的知识 有时,不同类型的对象可能共享同一种调用形式 例如下面的三种类型,都共享同一种调用形式:int(int,int); int add(int i, int j) { return i + j; } auto mod = [](int i, int j) {return i * j; }; struct divide { int o...

董哥的黑板报 5550

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【C++ 函数式编程】深入解析 C++ 函数式编程<functional> 库

函数式编程(Functional Programming)是一种编程范式,它将计算视为数学函数的求值,并避免改变状态和可变数据。这种编程范式的核心是,你可以用纯函数(Pure Functions)来构建整个程序。纯函数是一种输出完全由输入决定的函数,没有任何副作用。这样的函数更容易测试和调试,因为它们不依赖于外部状态。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 2874

C++ functional模板 #include <functional>(提供了一种更通用的函数绑定和调用机制)

std::function提供了一种更通用的函数绑定和调用机制,可以将普通函数、lambda表达式、bind表达式以及其他function对象绑定到std::function,并能够通过std::function调用所绑定的对象,并可以根据不同的参数类型执行不同的操作。

Dontla的博客 2683

C++_3——库(functional)与函数对象

C++_3——库(functional)与函数对象1 函数对象2 lambda表达式3 functional4 一些用于理解的引用附录lambda表达式捕获类型参考   这一系列文章的目的是在学习了C++基础后,继续补充一些C++基础和进阶的知识点,包括C++11的相关内容。 以C++11标准为基础。 C++网站:http://www.cplusplus.com/reference/ 1 函数对象 任何定义了函数调用操作符的对象都是函数对象(也叫仿函数),C++ 支持创建、操作新的函数对象,同时也提供了许多

fangfang12138的博客 1248

C++20 functional (tcy)

第一部分:概述 1.1.命名空间 placeholders 为std :: bind表达式中的未绑定参数定义占位符 std::placeholders 常数在名称空间中定义std::placeholders _1, _2, _3, _4, ... std::bind表达式中未绑定参数的占位符 1.2.Classes function 用指定的函数调用签名包装任何类型的可调用对象 mem_fn 根据指向成员的指针创建函数对象 bad_func...

tcy-阿春 1330

C++ <functional> 标准库完整版详解

摘要 C++标准库头文件<functional>是函数式编程的核心组件,它提供了一套统一的接口来处理各种可调用对象。主要内容包括: std::function:通用可调用对象容器,可存储函数、lambda、函数对象等 std::bind:参数绑定工具,支持参数重排和部分绑定 预定义函数对象:如std::plus、std::greater等,封装基本运算 函数适配器:如std::not1、std::mem_fn等,用于转换可调用对象 C++11-20增强:包括自动类型推导、简化绑定等新特性 这些组

2301_79646034的博客 895

C++ 标准库 <functional>

定义了若干通用的函数对象类型(即重载了operator()的类模板),以及用于包装、适配、调用函数或可调用对象的工具。这些组件不仅支持 STL 容器的定制比较、排序、哈希等功能,也常用于信号/槽、回调、任务调度等场景。

likuoelie的博客 947

C++ 11新特性之function

C++ 11标准库引入了许多创新功能,其中之一便是std::function。作为函数对象容器,std::function允许开发者在编译时不知道具体类型的情况下,存储和传递任意可调用对象,极大地提升了代码的灵活性和可复用性。本文将详细探讨std::function的工作原理、使用场景及其在现代C++编程中的重要地位。

hope_wisdom的技术博客 3323

C++中的functional和bind详解

plusminusmultipliesdividesmodulusnegateequal_togreaterlessless_equallogical_orbit_andbit_orbit_xor// 使用预定义的函数对象int());// 等价于});头文件和std::bind为C++提供了强大的函数式编程能力,使得函数可以作为一等公民被传递、组合和部分应用。虽然在现代C++中lambda表达式通常更受欢迎,但理解这些工具对于阅读和维护现有代码库仍然非常重要。

2201_75518579的博客 502

C++中functional包中function的使用

function 定义:wraps callable object of any type with specified function call signature(class template) 类模板std :: function是一个通用的多态函数包装器。 std :: function的实例可以存储,复制和调用任何可调用对象,如函数,lambda表达式,绑定表达式(bind)或...

Poo_Chai的博客 1万+

C++11 -- 包装器

/ 原型如下: template < class Fn , class . . . Args > /* unspecified */ bind(Fn && fn , Args && . . . args);注意( 1 ): fn 指的是需要包装的对象.( 2 ): args…对应的是给定fn函数中的参数.( 1 ) callable: 需要包装的对象…( 2 ) newCallable: 生成的一个新的可调用对象.

清欢Allen的技术博客 1047
上一篇: C++11_可变参数模板
下一篇: C++11_lambda表达式
Massachusetts_11
博客等级 码龄7年 231粉丝 57原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值