当前位置: 首页 > news >正文

山东做网站的公司有哪些哪些网站是做外贸生意的

山东做网站的公司有哪些,哪些网站是做外贸生意的,微信saas平台,网站开发安全问题std::function是C标准库中非常重要且强大的一个模板类,它让我们可以像使用普通函数一样灵活地存储和调用各种类型的“可调用对象”。下面我会用通俗的比喻,逐步详细讲解,让你不仅了解它的用法,还有背后的设计思想。一、什么是std:…

std::function是C++标准库中非常重要且强大的一个模板类,它让我们可以像使用普通函数一样灵活地存储和调用各种类型的“可调用对象”。下面我会用通俗的比喻,逐步详细讲解,让你不仅了解它的用法,还有背后的设计思想。


一、什么是std::function

简单说:

std::function是一个“万能的容器”,专门用来存储“那些可以调用的东西”。这些“东西”可以是普通函数、Lambda表达式、函数对象(重载了operator()的类实例),或者绑定了参数的函数。

打个比喻:

就像一个万能遥控器,你可以用它控制电视、空调、灯泡,只要你给它“控制方案”。同样,std::function也是一个“遥控器”,可以存放和调用各种“可调用对象”。


二、std::function的基本语法和定义

#include <functional>std::function<返回类型(参数类型列表)> fn;

比如:

std::function<int(int, int)> add;  // 可以存储任何两个整数参数,返回整数的函数

 

三、std::function可以存什么?

1. 普通函数

int add(int a, int b) { return a + b; }
fn = add;  // 存储普通函数

2. 函数指针

int multiply(int a, int b) { return a * b; }
int (*p)(int, int) = multiply;
fn = p;  // 存储函数指针

3. Lambda表达式(匿名函数)

复制代码

fn = [](int a, int b) { return a - b; };

4. 函数对象(仿函数)

复制代码

struct Functor {int operator()(int a, int b) { return a / b; }
};
Functor f;
fn = f;  // 存储函数对象

四、std::function的用法总结(逐步演示)

1. 定义

#include <functional>
#include <iostream>int main() {std::function<int(int, int)> fn; // 可以存储任何返回int、接受两个int的东西
}

2. 赋值(存入不同类型的“可调用对象”)

// 存普通函数
int add(int a, int b) { return a + b; }
fn = add;
std::cout << fn(2, 3) << std::endl; //输出5// 存lambda
fn = [](int a, int b) { return a * b; };
std::cout << fn(2, 3) << std::endl; //输出6// 存函数对象(仿函数)
struct Divide {int operator()(int a, int b) { return a / b; }
};
Divide div;
fn = div;
std::cout << fn(10, 2) << std::endl; //输出5

3. 调用(执行存储的函数)

int result = fn(10, 5);
std::cout << "结果是:" << result << std::endl;

4. 什么时候用std::function

  • 需要把不同的函数存到一起,作为参数或成员变量(多态调用)
  • 做回调函数
  • 实现策略模式(不同策略切换)
  • 在容器中存放“不同实现”的函数

五、std::function的内部实现(简要、通俗版)

其实,你不用太担心实现细节,它是用模板、类型擦除、动态内存分配等复杂技术实现的。其核心思想是:

  1. 类型擦除(Type Erasure):让你不用关心存的到底是什么类型,只要它符合调用规范。
  2. 虚函数表(虚继承)配合存储:实现“存、调用、复制”的必要逻辑。

这意味着:

-你可以用一个std::function变量存放任何符合“调用签名”的可调用对象;

-它会在内部通过指针和虚函数机制,把不同类型的“调用者”包装在一起。


六、std::function的优缺点

优点缺点
支持多种类型的可调用对象,极大增强灵活性相比普通函数调用,略微有性能损失(额外的虚拟调用和内存)
默认支持拷贝赋值,易于使用占用额外的堆内存(特别是存放大对象时)
类型安全,编译时检查签名不支持存储非调用对象(如非函数的指针/成员指针)
便于实现回调、多态、多功能参数等不适用极端性能场景(比如数十亿调用极端优化)

七、实际应用场景举例

1. 简单回调函数

复制代码

#include <functional>
#include <vector>
#include <iostream>void executeCallback(const std::function<void(int)>& callback, int value) {callback(value);
}int main() {auto lambda = [](int x) { std::cout << "lambda: " << x << std::endl; };executeCallback(lambda, 42);  // 存放lambda
}

2. 多策略的封装

std::function存放不同的“策略”实现,切换灵活。

复制代码

#include <functional>
#include <iostream>void process(const std::function<int(int,int)>& op, int a, int b) {std::cout << "结果:" << op(a, b) << std::endl;
}int main() {process([](int x, int y){ return x + y; }, 3, 4);process([](int x, int y){ return x * y; }, 3, 4);
}

八、简单总结

关键词作用/意义
std::function一个“万能容器”,用来存放并调用任何符合签名的函数或函数对象
“存储”可以存放普通函数、Lambda、仿函数、函数指针、绑定参数的函数等
“调用”通过调用operator(),像调用普通函数一样使用
设计思想类型擦除 + 多态,隐藏具体实现,提供极佳的灵活性
http://www.dtcms.com/a/405520.html

相关文章:

  • 中华门窗网怎么做网站拓者吧室内设计网站
  • 网站建设技术教程视频宜兴经济开发区人才网
  • 沈阳关键词优化价格网站seo工作内容
  • 一份完整的网站策划书公众号代运营费用
  • 一个网站多个域名重定向怎么做宝坻做网站
  • 网站菜单导航制作教程什么网站可以做外国生意
  • 弹性云主机做网站哪个找房网站好
  • 网站策划网温州文成县高端网站设计
  • 免费域名申请网站空间网站做虚假宣传有没有做处罚
  • 做传销网站php企业网站管理系统
  • 做网站哪些公司好云起时网站建设
  • 网络营销与管理专业是干什么的旺道seo推广效果怎么样
  • 新彊生产建设兵团网站网站icp备案查询官网
  • 徐州市政建设集团公司网站西安推广公司无网不胜
  • 上海网站建设公司介绍网站建设投
  • 网站建设与运营市场风险邯郸信息港招聘信息
  • 西安公司注册网站网站建设 教案
  • 广州网站推广html网页设计作业成品代码免费下载
  • 建购物网站要多少钱重庆seo推广外包
  • 购物网站建设存在的问题哈尔滨建设集团
  • 兼职做海报网站wordpress mysql扩展
  • 公司网站建设的会计分录有效的网站推广方案
  • 手机商城网站建设江西网站开发科技公司
  • 上海的广告公司网站建设建设一个网站需要做哪些工作
  • 正版seo搜索引擎泉州seo用户体验
  • 来宾网站建设石家庄网站建设是什么意思
  • 织梦网站地图调用全站文章影城网站设计
  • 做影视免费网站违法吗设计师互动平台
  • 南京模板建站哪家好河北公司网站建设效果
  • 网页粒子效果网站.帮别人做网站