触屏手机网站设计中国职业培训在线
- 作者: 五速梦信息网
- 时间: 2026年03月21日 11:30
当前位置: 首页 > news >正文
触屏手机网站设计,中国职业培训在线,wordpress视频主题模板下载地址,企业网站建设 总结文章目录 案例 1#xff1a;图形绘制库中的回调使用场景说明代码实现代码解释 案例 2#xff1a;网络服务器中的连接和消息处理回调场景说明代码实现代码解释 案例 3#xff1a;定时器中的回调使用场景说明代码实现代码解释 以下将通过不同场景给出几个使用回调类型的具体案… 文章目录 案例 1图形绘制库中的回调使用场景说明代码实现代码解释 案例 2网络服务器中的连接和消息处理回调场景说明代码实现代码解释 案例 3定时器中的回调使用场景说明代码实现代码解释 以下将通过不同场景给出几个使用回调类型的具体案例帮助你理解回调类型在 C 中的使用方式。我在这里掉进一个坑一直以为调用回调函数时是在调用回调fction构造回调类型函数类型就一直在下为什么他在这里只传入了类的指针虽然类有成员方法但是它知道调用哪个吗。后面发现在main函数调用回调函数时才发现这里传入的是类外面重新创建的回调函数。可以不用看 这里的声明的类型例如using DrawCompleteCallback std::functionvoid(); 它仅仅只是一个类型方便类中方法的参数定义后面定义的回调函数才是真正作为回调函数要调用并且可以使用回调类型的方法。案例 1图形绘制库中的回调使用 场景说明 假设你正在开发一个简单的图形绘制库当图形绘制完成后需要通知调用者执行一些额外操作比如记录日志或者更新界面状态。这时就可以使用回调函数来实现这种通知机制。 代码实现 #include iostream #include functional// 定义绘制完成的回调类型 using DrawCompleteCallback std::functionvoid();// 图形类 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; }代码解释 回调类型定义DrawCompleteCallback 是一个不接受任何参数且返回值为 void 的可调用对象类型。Shape 类draw 方法接受一个 DrawCompleteCallback 类型的参数在图形绘制完成后调用该回调函数。回调函数实现logDrawCompletion 是一个普通函数作为回调函数用于记录图形绘制完成的日志。主函数调用在 main 函数中创建 Shape 对象并调用 draw 方法传入 logDrawCompletion 作为回调函数。 案例 2网络服务器中的连接和消息处理回调 场景说明 在一个简单的网络服务器中需要处理新连接的建立、连接关闭以及接收到消息等事件。可以使用回调函数来处理这些事件。 代码实现 #include iostream #include memory #include functional// 假设的连接类和消息类 class BaseMessage { public:using ptr std::shared_ptrBaseMessage; };class BaseConnection { public:using ptr std::shared_ptrBaseConnection; };// 定义回调类型 using ConnectionCallback std::functionvoid(const BaseConnection::ptr); using CloseCallback std::functionvoid(const BaseConnection::ptr); using MessageCallback std::functionvoid(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_sharedBaseConnection();if (connectionCallback) {connectionCallback(conn);}}// 模拟连接关闭事件void simulateConnectionClose() {BaseConnection::ptr conn std::make_sharedBaseConnection();if (closeCallback) {closeCallback(conn);}}// 模拟接收到消息事件void simulateMessageReceived() {BaseConnection::ptr conn std::make_sharedBaseConnection();BaseMessage::ptr msg std::make_sharedBaseMessage();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; }代码解释 回调类型定义定义了 ConnectionCallback、CloseCallback 和 MessageCallback 三种回调类型分别用于处理新连接建立、连接关闭和接收到消息事件。Server 类提供了设置回调函数的方法并模拟了三种事件的发生在事件发生时调用相应的回调函数。回调函数实现分别实现了处理新连接、连接关闭和接收到消息的回调函数。主函数调用在 main 函数中创建 Server 对象设置回调函数并模拟三种事件的发生。 案例 3定时器中的回调使用 场景说明 实现一个简单的定时器类当定时器超时后执行指定的回调函数。 代码实现 #include iostream #include functional #include thread #include chrono// 定义定时器回调类型 using TimerCallback std::functionvoid();// 定时器类 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; }代码解释 回调类型定义TimerCallback 是一个不接受任何参数且返回值为 void 的可调用对象类型。Timer 类start 方法接受一个超时时间秒和一个 TimerCallback 类型的回调函数启动一个新线程在指定的超时时间后调用回调函数。回调函数实现onTimerExpired 是一个普通函数作为定时器超时后的回调函数输出提示信息。主函数调用在 main 函数中创建 Timer 对象启动定时器并传入 onTimerExpired 作为回调函数。 通过以上案例你可以看到回调类型在不同场景下的使用方式其核心思想是将一个可调用对象作为参数传递给某个函数或类在特定事件发生时调用该可调用对象。
- 上一篇: 触屏版网站模板工信部网站备案多久
- 下一篇: 穿衣搭配的网站如何做域名解析错误无法上网
相关文章
-
触屏版网站模板工信部网站备案多久
触屏版网站模板工信部网站备案多久
- 技术栈
- 2026年03月21日
-
畜牧网站建设老网站怎么优化
畜牧网站建设老网站怎么优化
- 技术栈
- 2026年03月21日
-
处室网站建设思路建设网上银行个人网上银行
处室网站建设思路建设网上银行个人网上银行
- 技术栈
- 2026年03月21日
-
穿衣搭配的网站如何做域名解析错误无法上网
穿衣搭配的网站如何做域名解析错误无法上网
- 技术栈
- 2026年03月21日
-
传播公司可以做门户网站吗wordpress更换子域名
传播公司可以做门户网站吗wordpress更换子域名
- 技术栈
- 2026年03月21日
-
传播建设网站引擎搜索网站
传播建设网站引擎搜索网站
- 技术栈
- 2026年03月21日






