首页 > 系统相关 >Ubuntu 18.04.06 PCL C++学习记录(四)知识点补充

Ubuntu 18.04.06 PCL C++学习记录(四)知识点补充

时间:2024-03-18 15:58:51浏览次数:19  
标签:知识点 调用 06 函数 18.04 pcl PointCloud boost 指针

@[TOC]PCL中K-Dtree模块的学习

学习背景

参考书籍:《点云库PCL从入门到精通》以及官方代码PCL官方代码链接

学习内容

PCL库中的智能指针和回调函数

智能指针

 pcl::PointCloud<pcl::PointXYZRGBA>::Ptr CloudOut(new pcl::PointCloud<pcl::PointXYZRGBA>());//存储输出点云

这一行代码中pcl::PointCloud<pcl::PointXYZRGBA>::Ptr是 PCL库中的一种智能指针类型,专门用于管理点云对象的内存。这种智能指针基于 boost 的 shared_ptr 实现,用于自动管理 pcl::PointCloud<pcl::PointXYZRGBA> 类型对象的生命周期。
具体到这句代码中
pcl::PointCloud<pcl::PointXYZRGBA>::Ptr 表示定义一个指向pcl::PointCloud<pcl::PointXYZRGBA> 类型的智能指针CloudOut 是这个智能指针的变量名。
new pcl::PointCloud<pcl::PointXYZRGBA>() 在堆上创建了一个新的 pcl::PointCloud<pcl::PointXYZRGBA> 类型的对象,并返回了一个指向这个新创建对象的原始指针。当指针超出其作用范围时,内存会被释放。

回调函数

  • 一个普通函数A的输入变量改为了函数B的名字,此时函数B就叫做回调(diao)函数。举个例子,有一个WIN10闹钟的程序要求在六点播放音乐,消耗资源最大的做法就是一直循环获得系统时间当到六点播放音乐。另外一种就是调用系统提供的定时函数,当定时达到七点再调用播放音乐的函数,在为WIN10中调用一个定时函数比一直循环消耗的资源要少一些。
  • 回到这一章
boost::function<void(const pcl::PointCloud<pcl::PointXYZRGBA>::ConstPtr&)> f = boost::bind(&SimpleOpenNIViewer::cloud_cd_,this,_1);

这里,boost::function 是一个泛型函数封装器,可以存储、调用任何类型的可调用实体(比如函数、lambda 表达式、绑定表达式、或其他函数对象)。void 表示这个函数不返回任何值。函数参数是一个指向常量 pcl::PointCloud<pcl::PointXYZRGBA> 对象的智能指针(ConstPtr),表示这个函数将被调用时需要提供一个点云对象的常量引用。
boost::bind 允许创建一个绑定表达式,它可以存储一个成员函数的调用,其中 &SimpleOpenNIViewer::cloud_cb_ 是成员函数的地址,this 关键字表示当前对象的指针(即成员函数所属的对象),_1 是一个占位符,表示这个绑定表达式的第一个参数将在函数调用时被提供。

boost::signals2::connection c = interface->registerCallback(f);

这行代码调用了点云接口对象 interface 的 registerCallback 方法,传入之前定义的 f 作为参数。这个方法的作用是将 f 注册为一个回调函数,以便在新的点云数据到达时自动调用 f(即 cloud_cb_ 函数)。registerCallback 方法返回一个 boost::signals2::connection 对象,这个对象可以用于管理回调的连接状态(比如断开连接)。

标签:知识点,调用,06,函数,18.04,pcl,PointCloud,boost,指针
From: https://blog.csdn.net/weixin_44178555/article/details/136808818

相关文章

  • L1-064 估值一亿的AI核心代码(20分)
    参考自:http://www.manongjc.com/detail/28-gsdqaxrxcgnqqlv.html有改动。个人认为已经是这道题最好的解法了。注意点为测试点四:(以标点符号打头的时候别忽略掉前面有空格)输入:1,dac输出,decAI:,dec#include<bits/stdc++.h>usingnamespacestd;intmain(){ ......
  • 动态规划基础知识点(包含文档)
    动态规划知识点我也不知道为啥要收fei,我普通上传,但是平台好像不能直接看,大家可以试看,因为该文档就两页,还没完善1.动态规划与贪心的区别(1)求解问题区别:贪心:顾名思义,就是尽量的贪心使得结果利益最大化,从局部最优推出全局最优,比如:桌子上有三张钞票,面额各不相同,你只能取两次,每......
  • C语言最重要的知识点(6)
    第六章指针变量的本质是用来放地址,而一般的变量是放数值的。1、int *p中  *p和p的差别:简单说*p是数值,p是地址!*p可以当做变量来用;*的作用是取后面地址p里面的数值 p是当作地址来使用。可以用在scanf函数中:scanf(“%d”,p);2、*p++和(*p)++的之间的差别:改错题目中很重要......
  • git diff 查看文件修改提示“new mode 100644”和“old mode 100755”(使用 vscode 查
    使用vscode查看不出差异通过gitgui或者通过gitbash查看文件内容并没有修改,出现这个问题的原因是修改了文件的权限,文件的filemode发生了变化,比如执行了chmod命令。解决办法:切换到项目的根目录,执行如下命令,忽略filemode的变化即可gitconfig--addcore.filemodefa......
  • Arduino RP2040 + SSD1306 I2C OLED +LittleFS存储GBK字库实现中文显示
    ArduinoRP2040+SSD1306I2COLED+LittleFS存储GBK字库实现中文显示......
  • 计算机等级考试:信息安全技术 知识点十二
    1、在SQL注入程序中,入侵者通常将未授权的数据库语句插入或注入有洞的SQL数据信道中。通常情况下,攻击所针对的数据信道包括存储过程和Web应用程序输入参数。然后这些注入的语句被传递到数据库中并在数据库中热行。使用SQL注入,攻击者可以不受限制地访问整个数据库:利用程序对用户......
  • 消息队列知识点总结
    一.什么是中间件?中间件是一类提供系统软件和应用软件连接、便于软件各部分之间沟通的软件,应用软件可以借助中间件在不同技术架构之间共享信息与资源。常用的中间件包括Redis、消息队列、分布式存储等。以智能BI平台项目为例。现有的系统包括图表管理、用户管理等,随着系统应......
  • Django基础知识点二
    Django基础知识点二【一】分页器【1】关键参数current_page:当前所在页数start_data:起始数据end_data:结束数据per_count:每一页展示的数据all_count:所有数据数量page_count:总页数:divmod(all_count,per_count)current_page(per_count=5)start_dataend_data......
  • 406. 根据身高重建队列c
    /***Returnanarrayofarraysofsize*returnSize.*Thesizesofthearraysarereturnedas*returnColumnSizesarray.*Note:Bothreturnedarrayand*columnSizesarraymustbemalloced,assumecallercallsfree().*/typedefstructnode{inth......
  • Gradle知识点整理(1)
    Gradle知识点整理(1)文章目录Gradle知识点整理(1)常见的项目构建工具Gradle安装Gradle和Maven项目结构修改Maven下载源GradleWrapperGroovy学习Gretty项目部署Gradle项目生命周期Gradle中的setting文件Gradle的Task常见的项目构建工具Ant:优点:使用灵活,速度快(快......