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

c++学习(八、函数指针和线程)

目录

一、一般函数指针

1. 使用方法

2.注意事项

二.成员函数指针

1.使用方法(指定作用域)

2.调用方法(生成对象,根据对象调用)

三、函数与线程

1.使用 boost::bind 创建函数对象

2.类中引入指针管理线程


一、一般函数指针

1. 使用方法

    using FuncPtr = int (*)(int, int);FuncPtr funcPtr = &add;

2.注意事项

函数指针调用时候应该是

int result = (*funcPtr)(3, 4);

但是为了方便也可以

int result = funcPtr(3, 4);
#include <iostream>// 普通函数
int add(int a, int b) {return a + b;
}int main() {// 定义函数指针类型using FuncPtr = int (*)(int, int);// 获取函数地址并赋值给函数指针FuncPtr funcPtr = &add;// 通过函数指针调用函数// int result = funcPtr(3, 4);int result = (*funcPtr)(3, 4);std::cout << "Result: " << result << std::endl;return 0;
}

二.成员函数指针

1.使用方法(指定作用域)

    using MemberFuncPtr = int (Calculator::*)(int, int);// 获取成员函数地址MemberFuncPtr memberFuncPtr = &Calculator::add;

2.调用方法(生成对象,根据对象调用)

    Calculator calc;// 通过成员函数指针调用成员函数int result = (calc.*memberFuncPtr)(3, 4);

三、函数与线程

1.使用 boost::bind 创建函数对象

对于auto boundFunc = boost::bind(&CBSROS::updateObstacleThread, this);,this是对象,updateObstacleThread是成员函数,有对象有成员函数,绑定在一起返回一个函数,可以直接调用这个函数了,就相当于调用当前成员的成员函数。

#include <iostream>
#include <boost/bind.hpp>class CBSROS {
public:void updateObstacleThread() {std::cout << "Updating obstacle state..." << std::endl;}void testBindCall() {// 使用 boost::bind 创建函数对象auto boundFunc = boost::bind(&CBSROS::updateObstacleThread, this);// 直接调用函数对象boundFunc();}
};int main() {CBSROS cbsRos;cbsRos.testBindCall();return 0;
}

2.类中引入指针管理线程

update_obstacle_thread_ =new boost::thread(boost::bind(&CBSROS::updateObstacleThread, this));

上面的代码相当于创建了一个线程类,线程类里面执行的是当前对象的成员函数,之后找到一个指针来指向这个线程类,用来管理线程,比如让线程开始或者结束等。。。

http://www.lqws.cn/news/590743.html

相关文章:

  • idea maven自动导包 自动清除无用的依赖包
  • 怎么查看Android设备中安装的某个apk包名和启动页activity
  • 设计模式-模板模式
  • Linux驱动学习day12(mmap)
  • 道可云人工智能每日资讯|浦东启动人工智能创新应用竞赛
  • 业界优秀的零信任安全管理系统产品介绍
  • 从0开始学习R语言--Day35--核密度动态估计
  • ABB PPD 113 B03-23-100110 3 bhe 023584 r 2334 AC 800 pec控制系统
  • 腾讯 iOA 零信任产品:安全远程访问的革新者
  • ASP.NET代码审计 MVC架构 SQL注入漏洞
  • LINUX2.6设备注册与GPIO相关的API
  • 将N8N配置为服务【ubuntu】
  • 第4课:Flask请求与响应对象深度解析
  • 使用mavros启动多机SITL仿真
  • WPF学习笔记(17)样式Style
  • Coze(扣子):基础学习
  • 利用视觉-语言模型搭建机器人灵巧操作的支架
  • 【Docker基础】Docker数据卷:数据卷的作用与使用场景
  • 算法-每日一题(DAY12)最长和谐子序列
  • Salesforce Accountアクションボタン実装ガイド
  • 简单聊聊 Flutter 在鸿蒙上为什么可以 hotload ?
  • 飞算JavaAI—AI编程助手 | 编程领域的‘高科技指南针’,精准导航开发!
  • 具身多模态大模型在感知与交互方面的综述
  • sqlmap学习ing(2.[第一章 web入门]SQL注入-2(报错,时间,布尔))
  • rocketmq 之 阿里云转本地部署实践总结
  • Vue3 中 Excel 导出的性能优化与实战指南
  • 创建和连接Vue应用程序实例
  • 缓存系统-淘汰策略
  • 强化学习系列--dpo损失函数
  • 齿轮的齿厚极限偏差如何确定?一起学习一下