ROS2快速入门--C++基础

适合有ROS1基础的宝宝们~

写在前面:

  1. ROS2中通信机制跟ROS1还是差不多的:话题/服务/动作 通信,通信的数据载体,称为"接口" (msg、srv、action文件)
  2. 其文件构建编译还是使用的Cmake
  3. 在ROS2中大部分封装采用面向对象特征,如果需要稍微复习一下面向对象

1.模板

将变量类型参数化,以适配不同的类型,

1.1 函数模板

如下实现int || float 类型变量的交换:

cpp 复制代码
#include <iostream>
using namespace std;
void swapint(int* a, int* b)
{
	int p = *a;
	*a = *b;
	*b = p;
}
void showint(int a, int b)
{
	cout << "a=" << a << "," << "b=" << b << endl;
}
void swapfloat(float* a, float* b)
{
	float p = *a;
	*a = *b;
	*b = p;
}
void showfloat(float a, float b)
{
	cout << "a=" << a << "," << "b=" << b << endl;
}
int main()
{
	int a1 = 3, b1 = 12;
	swapint(&a1, &b1);
	showint(a1, b1);
	float a2 = 12.3, b2 = 45.1;
	swapfloat(&a2, &b2);
	showfloat(a2, b2);
	return 0;
}

函数内部实现基本重复,能否i只写一种函数就实现两种不同类型变量的交换呢

普通函数将变量作为参数,而模板能将变量类型也参数化~

模板格式

template <typename 形参名, typename 形参名...> //模板头(模板说明)

返回值类型typename 函数名funtion()(参数列表) //函数定义

{

函数体;

}

经过模板简化后的不同类型变量相加

cpp 复制代码
#include <iostream>
using namespace std;
template<typename T>//模板头,template关键字告诉编译器开始泛型编程
T add(T t1, T t2)//类型参数化为T
{
	return t1 + t2;
}
int main()
{
	cout << add(12, 34) << endl;
	cout << add(12.2,45.6) << endl;
	return 0;
}

模板指定类型声明(显式声明):

也可不声明直接使用显式声明

cpp 复制代码
声明格式:template 函数返回值类型 函数名<实例化的类型>(参数列表);

#include <iostream>
using namespace std;
template<typename T>
T add(T t1, T t2)
{
		return t1 + t2;
}
template int add<int>(int t1, int t2);//显示实例化为int类型
int main()
{
		cout << add<int>(12, 'A') << endl;//函数模板调用:A-65
		cout << add(1.4, 5.7) << endl;//隐式实例化:自动实参推演
		cout << add<int>(23.4, 44.2) << endl;//显示声明可省,结果为67
		return 0;
}

1.2 类模板

模板格式

cpp 复制代码
template<typename 形参名,typename 形参名...>
class 类名

{
        .........
}


ttemplate<typename T1, typename T2>
class B
{
public:
        T1 a;
        T2 b;
        T1 func(T1 a, T2& b);

};


B <int, string>  b;    //创建模板类B的一个对象

对象指针创建(左右两边类型要一 一对应):

cpp 复制代码
Point<float, float> *p1 = new Point<float, float>(10.6, 109.3);

Point<char*, char*> *p = new Point<char*, char*>("东京180度", "北纬210度");
  • colcon build 参数
bash 复制代码
--packages-select,仅生成单个包(或选定的包)
--packages-up-to,构建选定的包,包括其依赖项
--packages-above,整个工作区,然后对其中一个包进行了更改。此指令将重构此包以及(递归地)依赖于此包的所有包
相关推荐
奈斯先生Vector2 分钟前
AIGC 视频生成换个拍法:用 Kling Video 把一张人物图变成可剪辑的短故事
开发语言·人工智能·windows·python·aigc·音视频
一木 之林4 分钟前
五、C++ 新特性、关键字与编译原理(进阶)(一)
c语言·开发语言·c++
2601_962298275 分钟前
交易开拓者通常使用什么编程语言?这种语言如何帮助自动化交易?
java·c++·python·编程语言·自动化交易
秋名RG10 分钟前
Java IO 体系深度剖析:从流式编程到 JDK 21 高并发陷阱
java·开发语言
码匠许师傅11 分钟前
【设计模式精讲】23.备忘录模式(Memento)
c++·设计模式·软件工程·uml·备忘录模式
Pocker_Spades_A20 分钟前
Python快速入门专业版(五十九):re实战——用正则爬取豆瓣电影Top250(全流程解析)
开发语言·python
a1879272183131 分钟前
【算法】动态规划第五篇:区间 DP——从“看什么都像背包“到“最后戳谁“
算法·leetcode·动态规划·dp·区间·区间dp·算法讲解
键盘会跳舞35 分钟前
【C++多线程】thread_local 深度剖析:线程局部存储的生命周期与实现
c++·多线程·thread_local
whitelbwwww36 分钟前
c++ 多线程
开发语言·c++·算法
额鹅恶饿呃37 分钟前
随着CentOS官方停服的时间越来越久,大量仍在使用CentOS7的企业和运维从业者
java·python·算法·c#·ruby