当前位置: 首页 > 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.dtcms.com/a/264249.html

相关文章:

  • EasyExcel实现Excel复杂格式导出:合并单元格与样式设置实战
  • web开发,旅游景点管理系统推荐算法版本demo,基于asp.net,mvc,c#,sql server
  • 编写shell脚本扫描工具,扫描服务器开放了哪些端口(再尝试用python编写一个)
  • Set和Map的解析与应用场景
  • OSPF虚拟链路术语一览:快速掌握网络路由
  • 【字符串方法】split使用介绍
  • Android NDK探索之旅(一)
  • 中心效应:多中心临床试验的关键考量
  • 【科研绘图系列】基于R语言的复杂热图绘制教程:环境因素与染色体效应的可视化
  • 图神经网络(篇二)-基础知识
  • MySQL处理并发访问和高负载的关键技术和策略
  • 设置linux静态IP
  • 创建和连接Vue应用程序实例
  • AI的未来:人类会被取代,还是变得更强大?
  • Go语言的Map
  • 【仿muduo库实现并发服务器】Poller模块
  • Adobe AI高效设计秘籍与创新思维进阶
  • WebSocket扫盲
  • 7 项目立项管理
  • MYSQL-JAVAweb1
  • 华为设备 QoS 流分类与流标记深度解析及实验脚本
  • Ubuntu+Nginx+php+SQLite3+typecho手动搭建个人博客
  • 什么是消息队列?
  • 21.合并两个有序链表
  • android RecyclerView隐藏整个Item后,该Item还占位留白问题
  • 变幻莫测:CoreData 中 Transformable 类型面面俱到(七)
  • IDE全家桶专用快捷键----------个人独家分享!!
  • 计算机网络(三)传输层TCP
  • 630,百度文心大模型4.5系列开源!真香
  • Spring Boot 启动加载执行链路分析