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

网站设计一年费用站长之家官网

网站设计一年费用,站长之家官网,动漫制作专业专升本去哪个专业,我的qq中心网页版文章目录 案例 1:图形绘制库中的回调使用场景说明代码实现代码解释 案例 2:网络服务器中的连接和消息处理回调场景说明代码实现代码解释 案例 3:定时器中的回调使用场景说明代码实现代码解释 以下将通过不同场景给出几个使用回调类型的具体案…

文章目录

      • 案例 1:图形绘制库中的回调使用
        • 场景说明
        • 代码实现
        • 代码解释
      • 案例 2:网络服务器中的连接和消息处理回调
        • 场景说明
        • 代码实现
        • 代码解释
      • 案例 3:定时器中的回调使用
        • 场景说明
        • 代码实现
        • 代码解释


以下将通过不同场景给出几个使用回调类型的具体案例,帮助你理解回调类型在 C++ 中的使用方式。我在这里掉进一个坑,一直以为调用回调函数时,是在调用回调fction构造回调类型函数类型,就一直在下为什么他在这里只传入了类的指针(虽然类有成员方法,但是它知道调用哪个吗?)。后面发现在main函数调用回调函数时,才发现这里传入的是类外面,重新创建的回调函数。(可以不用看😂)
这里的声明的类型例如:using DrawCompleteCallback = std::function<void()>; ,它仅仅只是一个类型,方便类中方法的参数定义,后面定义的回调函数才是真正作为回调函数要调用,并且可以使用回调类型的方法。

案例 1:图形绘制库中的回调使用

场景说明

假设你正在开发一个简单的图形绘制库,当图形绘制完成后,需要通知调用者执行一些额外操作,比如记录日志或者更新界面状态。这时就可以使用回调函数来实现这种通知机制。

代码实现
#include <iostream>
#include <functional>// 定义绘制完成的回调类型
using DrawCompleteCallback = std::function<void()>;// 图形类
class Shape {
public:void draw(DrawCompleteCallback callback) {std::cout << "Drawing the shape..." << std::endl;// 模拟绘制过程for (int i = 0; i < 1000000; ++i) {}std::cout << "Shape drawn." << std::endl;// 绘制完成后调用回调函数if (callback) {callback();}}
};// 日志记录函数,作为回调函数
void logDrawCompletion() {std::cout << "Logging: Shape drawing is completed." << std::endl;
}int main() {Shape shape;// 使用日志记录函数作为回调shape.draw(logDrawCompletion);return 0;
}
代码解释
  1. 回调类型定义DrawCompleteCallback 是一个不接受任何参数且返回值为 void 的可调用对象类型。
  2. Shapedraw 方法接受一个 DrawCompleteCallback 类型的参数,在图形绘制完成后调用该回调函数。
  3. 回调函数实现logDrawCompletion 是一个普通函数,作为回调函数用于记录图形绘制完成的日志。
  4. 主函数调用:在 main 函数中,创建 Shape 对象并调用 draw 方法,传入 logDrawCompletion 作为回调函数。

案例 2:网络服务器中的连接和消息处理回调

场景说明

在一个简单的网络服务器中,需要处理新连接的建立、连接关闭以及接收到消息等事件。可以使用回调函数来处理这些事件。

代码实现
#include <iostream>
#include <memory>
#include <functional>// 假设的连接类和消息类
class BaseMessage {
public:using ptr = std::shared_ptr<BaseMessage>;
};class BaseConnection {
public:using ptr = std::shared_ptr<BaseConnection>;
};// 定义回调类型
using ConnectionCallback = std::function<void(const BaseConnection::ptr&)>;
using CloseCallback = std::function<void(const BaseConnection::ptr&)>;
using MessageCallback = std::function<void(const BaseConnection::ptr&, BaseMessage::ptr&)>;// 服务器类
class Server {
public:void setConnectionCallback(const ConnectionCallback& cb) {connectionCallback = cb;}void setCloseCallback(const CloseCallback& cb) {closeCallback = cb;}void setMessageCallback(const MessageCallback& cb) {messageCallback = cb;}// 模拟新连接事件void simulateNewConnection() {BaseConnection::ptr conn = std::make_shared<BaseConnection>();if (connectionCallback) {connectionCallback(conn);}}// 模拟连接关闭事件void simulateConnectionClose() {BaseConnection::ptr conn = std::make_shared<BaseConnection>();if (closeCallback) {closeCallback(conn);}}// 模拟接收到消息事件void simulateMessageReceived() {BaseConnection::ptr conn = std::make_shared<BaseConnection>();BaseMessage::ptr msg = std::make_shared<BaseMessage>();if (messageCallback) {messageCallback(conn, msg);}}private:ConnectionCallback connectionCallback;CloseCallback closeCallback;MessageCallback messageCallback;
};// 处理新连接的回调函数
void handleNewConnection(const BaseConnection::ptr& conn) {std::cout << "New connection established." << std::endl;
}// 处理连接关闭的回调函数
void handleConnectionClose(const BaseConnection::ptr& conn) {std::cout << "Connection closed." << std::endl;
}// 处理接收到消息的回调函数
void handleMessageReceived(const BaseConnection::ptr& conn, BaseMessage::ptr& msg) {std::cout << "Message received on connection." << std::endl;
}int main() {Server server;// 设置回调函数server.setConnectionCallback(handleNewConnection);server.setCloseCallback(handleConnectionClose);server.setMessageCallback(handleMessageReceived);// 模拟事件server.simulateNewConnection();server.simulateMessageReceived();server.simulateConnectionClose();return 0;
}
代码解释
  1. 回调类型定义:定义了 ConnectionCallbackCloseCallbackMessageCallback 三种回调类型,分别用于处理新连接建立、连接关闭和接收到消息事件。
  2. Server:提供了设置回调函数的方法,并模拟了三种事件的发生,在事件发生时调用相应的回调函数。
  3. 回调函数实现:分别实现了处理新连接、连接关闭和接收到消息的回调函数。
  4. 主函数调用:在 main 函数中,创建 Server 对象,设置回调函数,并模拟三种事件的发生。

案例 3:定时器中的回调使用

场景说明

实现一个简单的定时器类,当定时器超时后,执行指定的回调函数。

代码实现
#include <iostream>
#include <functional>
#include <thread>
#include <chrono>// 定义定时器回调类型
using TimerCallback = std::function<void()>;// 定时器类
class Timer {
public:void start(int seconds, TimerCallback callback) {std::thread([seconds, callback]() {std::this_thread::sleep_for(std::chrono::seconds(seconds));if (callback) {callback();}}).detach();}
};// 定时器超时后的回调函数
void onTimerExpired() {std::cout << "Timer expired!" << std::endl;
}int main() {Timer timer;// 启动定时器,设置超时时间为 3 秒,并传入回调函数timer.start(3, onTimerExpired);std::cout << "Timer started. Waiting for expiration..." << std::endl;// 为了避免主线程提前退出,让主线程休眠一段时间std::this_thread::sleep_for(std::chrono::seconds(5));return 0;
}
代码解释
  1. 回调类型定义TimerCallback 是一个不接受任何参数且返回值为 void 的可调用对象类型。
  2. Timerstart 方法接受一个超时时间(秒)和一个 TimerCallback 类型的回调函数,启动一个新线程,在指定的超时时间后调用回调函数。
  3. 回调函数实现onTimerExpired 是一个普通函数,作为定时器超时后的回调函数,输出提示信息。
  4. 主函数调用:在 main 函数中,创建 Timer 对象,启动定时器并传入 onTimerExpired 作为回调函数。

通过以上案例,你可以看到回调类型在不同场景下的使用方式,其核心思想是将一个可调用对象作为参数传递给某个函数或类,在特定事件发生时调用该可调用对象。

http://www.yidumall.com/news/28513.html

相关文章:

  • 大学网站建设考核办法sem招聘
  • 杭州盘石做网站专业吗广告联盟全自动赚钱系统
  • 网站开发流程博客湖南网站seo找行者seo
  • 如何在网站中插入背景音乐seo外包收费
  • 唐山市住房和城乡建设局官方网站新冠疫情最新数据
  • 房地产开发网站建设百度关键词优化查询
  • 政务服务网站的建设原则报个计算机培训班多少钱
  • 建立网站难吗网络稿件投稿平台
  • 做音乐网站用什么程序滕州网站建设优化
  • 企业网站东莞网站建设制作怎么做宣传推广
  • 做网站允许发布什么内容网络热词2022流行语及解释
  • 电商网站建设比较好的广州日新增51万人
  • 谷歌官方网站注册上海比较大的优化公司
  • 织梦生成网站地图长沙百度网站排名优化
  • 深圳展览展示公司排行绍兴百度seo
  • 莱芜摩托车网站seo教程技术整站优化
  • wordpress文章分集搜索引擎优化方法有哪几种
  • 做网站的难点是什么高清视频网络服务器
  • 做电影网站看电影算网站流量吗广安seo外包
  • 郑州网站设计费用怎么建立网站
  • 门店门面设计效果图网站优化推广方案
  • 广州购网站建设个人怎么做网站
  • 口碑好网站建设是哪家seo文章生成器
  • 珠海网站建设公司有哪些论坛推广案例
  • youtube上做美食的视频网站一个产品的市场营销策划方案
  • 网站建设需求问卷如何注册一个平台
  • 贵阳两学一做网站营销公司取名字大全
  • 网站的扁平化设计理念新东方雅思培训价目表
  • 宣武网站建设怎么创建域名
  • java php做网站的区别营销型网站建设ppt