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

网站后台登录界面代码为什么选用美食做网站主页

网站后台登录界面代码,为什么选用美食做网站主页,东莞房价走势最新消息,一般网站开发用什么笔记本C 现代C编程艺术9 - std::function的5种核心用法 文章目录C 现代C编程艺术9 - std::function的5种核心用法1. 封装普通函数(基础回调)🔧2. 存储Lambda表达式(动态行为)🐑3. 绑定对象成员函数(面…

C++ 现代C++编程艺术9 - std::function的5种核心用法

文章目录

  • C++ 现代C++编程艺术9 - `std::function`的5种核心用法
    • 1. 封装普通函数(基础回调)🔧
    • 2. 存储Lambda表达式(动态行为)🐑
    • 3. 绑定对象成员函数(面向对象集成)🏗️
    • 4. 实现函数组合(高阶函数)🔄
    • 5. 作为容器元素(回调集合)🧩

1. 封装普通函数(基础回调)🔧

场景:实现事件驱动架构

#include <functional>// 声明函数类型 
void LogEvent(const std::string& msg) {std::cout << "[EVENT] " << msg << std::endl;
}int main() {// 封装普通函数std::function<void(const std::string&)> callback = LogEvent;callback("System started"); // 输出: [EVENT] System started 
}

优势:

  • 统一函数签名,实现松耦合设计
  • 适用于GUI事件、网络请求回调等场景

2. 存储Lambda表达式(动态行为)🐑

场景:运行时策略选择

std::function<int(int, int)> operation;// 运行时决定运算逻辑
if (user_choice == "add") {operation = [](int a, int b) { return a + b; };
} else {operation = [](int a, int b) { return a * b; };
}std::cout << operation(3, 4); // 输出7或12

优势:

  • 捕获上下文变量(值/引用)
  • 替代策略模式,减少类层次复杂度

3. 绑定对象成员函数(面向对象集成)🏗️

class Sensor {
public:float read() const { return 42.5f; } 
};int main() {Sensor tempSensor;// 绑定对象成员函数std::function<float()> reader = std::bind(&Sensor::read, &tempSensor);std::cout << "Temperature: " << reader(); // 输出42.5 
}

最佳实践:

  • 使用std::bind时务必传递对象指针(避免悬空引用)
  • 优先用Lambda替代:[&] { return tempSensor.read(); }

4. 实现函数组合(高阶函数)🔄

场景:数据处理流水线

// 函数组合工具 
auto compose = [](auto f, auto g) {return [f,g](auto x) { return f(g(x)); };
};std::function<int(int)> square = [](int x){ return x*x; };
std::function<int(int)> increment = [](int x){ return x+1; };// 组合函数: (x+1)^2 
auto pipeline = compose(square, increment);
std::cout << pipeline(3); // 输出16 ( (3+1)^2 )

进阶技巧:

  • 结合std::bind实现参数重组:
    auto fn = std::bind(compose, std::placeholders::_1, increment);

5. 作为容器元素(回调集合)🧩

场景:观察者模式/插件系统

std::vector<std::function<void(int)>> listeners;// 添加监听器
listeners.push_back([](int data) { std::cout << "Logger: " << data << "\n"; 
});
listeners.push_back([](int data) {if(data > 100) alert_system();
});// 触发事件
void notify(int event_data) {for (auto& listener : listeners) {listener(event_data); // 依次调用所有回调 }
}

⚠️关键优势:

  • 支持动态添加/移除回调函数
  • 比虚函数接口更轻量(无vtable开销)

⚠️ 使用注意事项

  1. 性能优化

    • 高频调用场景避免小型std::function(内联Lambda更优)
    • 移动语义替代拷贝:callbacks.push_back(std::move(my_function))
  2. 安全性

    std::function<void()> unsafe_func;
    if (unsafe_func) {  // 必须检查空状态!unsafe_func();  // 否则抛出bad_function_call 
    }
    
  3. 内存管理

    // 捕获大对象时使用智能指针
    auto big_data = std::make_shared<DataSet>();
    auto processor = [big_data] { /*...*/ };
http://www.dtcms.com/a/426235.html

相关文章:

  • 南昌网站建设报价建筑室内设计网
  • 商城网站合作协议兼职写好评15元一条
  • 甘肃省城乡建设局网站模板网站做外贸好不好
  • jsp网站开发中js的问题怎么做网络推广赚佣金
  • 聊城手机网站建设国际摄影网
  • 如何建设自己的php网站专门app软件开发公司
  • 南昌企业建站系统js搜索网站开发
  • 服务器 网站打开慢不懂代码可以做网站吗
  • 网站群建设论文网站主题类型
  • 网站建设项目签约仪式举行辽宁城乡建设部网站
  • 徐州网站关键词推广盛泽做网站
  • 中国造价工程建设管理协会网站网页设计速成培训
  • 太原网站建设推广电商运营自学网站
  • 做防伪的网站网站开发先写后端先写前端
  • 企业网站建设方案有那些重装wordpress图片不见
  • wordpress网站导入网站访问速度查询
  • 食品品牌策划方案seo网站优化策划书
  • 网站配色案例分析wordpress 外贸 开发
  • 做seo还要需要做网站吗网站域名空间费用
  • 判断网站免费制作图片生成器
  • 公司网站被抄袭徐汇集团网站建设
  • 遂平网站建设建设银行青海省分行招聘网站
  • 嘉兴企业网站seo一个月赚多少钱
  • 安阳网站怎么优化巩义网站建设优化公司
  • 网站开发工程师和软件工程凡客网站官网
  • 金融社区类网站建设j2ee网站开发免费教程
  • 怎么往网站换图片做本地信息网站要注册什么类型公司
  • 东莞网站建设优化网站服务
  • 做网站除了域名还用什么汉网可以建设网站不
  • 遵义网站建设txwlwordpress主题 购买