在学习KDL源码的时候,发现在“frames.hpp”中使用了大量的内联函数,涉及这些基础的类,向量(vector),旋转(rotation),坐标系(frame),力旋量(wrench),速度旋量(twist)等等。这也说明基础的类的包含的成员函数并不是十分复杂,符合内联函数的特点(规模较小、流程直接、频繁调用)。使用内联函数机制可以减小调用函数的开销。

KDL中的部分类定义(frames.hpp):

class Vector;
class Rotation;
class Frame;
class Wrench;
class Twist;
class Vector2;
class Rotation2;
class Frame2;

Vector部分的成员函数如下(frames.hpp):

class Vector
{
public:double data[3];//! Does not initialise the Vector to zero. use Vector::Zero() or SetToZero for thatinline Vector() {data[0]=data[1]=data[2] = 0.0;}//! Constructs a vector out of the three values x, y and zinline Vector(double x,double y, double z);//! Assignment operator. The normal copy by value semantics.inline Vector(const Vector& arg);//! Assignment operator. The normal copy by value semantics.inline Vector& operator = ( const Vector& arg);//! Access to elements, range checked when NDEBUG is not set, from 0..2inline double operator()(int index) const;//! Access to elements, range checked when NDEBUG is not set, from 0..2inline double& operator() (int index);

具体的定义在“fames.inl”文件中:

IMETHOD Vector::Vector(const Vector & arg)
{data[0] = arg.data[0];data[1] = arg.data[1];data[2] = arg.data[2];
}IMETHOD Vector::Vector(double x,double y, double z)
{data[0]=x;data[1]=y;data[2]=z;
}IMETHOD Vector& Vector::operator =(const Vector & arg)
{data[0] = arg.data[0];data[1] = arg.data[1];data[2] = arg.data[2];return *this;
}

在内联函数较多的情况下,为了避免头文件过长、版面混乱,可以将所有的内联函数定义移到一个单独的文件中去,然后再 用#include指令将它包含到类声明的后面(类的头文件的底部)。这样的文件称为一个内联函数定义文件。按照惯例, 应该将这个文件命名为“filename.inl”,其中“filename”与相应的头文件和实现文件相同。所以在frames.cpp末尾有#include "frames.inl"语句。

【机器人学】机器人开源项目KDL源码学习:(9)KDL中的内联函数相关推荐

  1. 【机器人学】机器人开源项目KDL源码学习:(5)KDL如何求解几何雅克比矩阵

    这篇文章试图说清楚两件事:1. 几何雅克比矩阵的本质:2. KDL如何求解机械臂的几何雅克比矩阵. 一.几何雅克比矩阵的本质 机械臂的关节空间的速度可以映射到执行器末端在操作空间的速度,这种映射可以通 ...

  2. 今年我读了四个开源项目的源码,来分享下心得

    今年来看了 RocketMQ.Kafka.Dubbo .Tomcat 的源码,之前也有读者询问过如何读源码,索性就来分享一下. 其实还看了一点点 Linux.Redis.jdk8,这几个阅读的目的和上 ...

  3. 开源项目实例源码_今年我读了四个开源项目的源码,来分享下心得

    今年来看了 RocketMQ.Kafka.Dubbo .Tomcat 的源码,之前也有读者询问过如何读源码,索性就来分享一下. 其实还看了一点点 Linux.Redis.jdk8,这几个阅读的目的和上 ...

  4. Go实现的5G核心网开源项目free5gc源码分析系列 | Gopher Daily (2021.01.08) ʕ◔ϖ◔ʔ

    每日一谚:"Abstractions should be discovered, not created." Go技术新闻 Go实现的5G核心网开源项目free5gc源码分析系列 ...

  5. 鸿蒙开源源码,基于鸿蒙系统开源项目OpenHarmony源码静态分析

    #ifndef __scc #define __scc(X) ((long) (X)) // 转为long类型 typedef long syscall_arg_t; #endif #define _ ...

  6. BT开源项目Snark源码分析

    BT开源项目Snark源码分析 Snark是国外一个开源Java的项目,实现了BitTorrent协议,通过分析此项目的源程序,可以更利于我们更加深入的了解当前流行的BT软件的原理,进而可以指导我们的 ...

  7. 开源项目Telegram源码 Telegram for Android Source

    背景介绍 Telegram 是一款跨平台的即时通信软件,它的客户端是自由及开放源代码软件.用户可以相互交换加密与自毁消息,发送照片.影片等所有类型文件.官方提供手机版.桌面版和网页版等多种平台客户端. ...

  8. C++学习笔记_3_ C++入门 内联函数

    C++学习笔记_3_ C++入门 内联函数 目录 C++学习笔记_3_ C++入门 内联函数 一.内联函数 1.查看方式 2.特性 宏的优缺点 C++有哪些技术替代宏? 一.内联函数 以inline修 ...

  9. python写个围棋程序_经典python实战项目blog源码学习

    这是廖雪峰老师实际项目的源码, python知识学得再多,都不如实战用一回. Day 1 – 搭建开发环境 Day 2 – 编写Web App骨架 Day 3 – 编写ORM Day 4 – 编写Mo ...

  10. 区块链开源项目Asch源码初探

    Asch这个名字是 App Side Chain 的缩写. 是一种基于区块链跨链技术的应用开发平台,目前全部核心代码已经在GitHub上开源. 区块链是比特币的底层技术,但是名气低于比特币,但是个人认 ...

最新文章

  1. C#中 int.TryParse 的用法
  2. 数据结构——队列(C语言实现)
  3. WINFORM 多条件动态查询 通用代码的设计与实现
  4. Java单例模式优化写法
  5. java中哈希表怎么表示_java中HashMap概念是什么?怎么存取实现它?
  6. 想尽快进入游戏开发行业的必经之路!
  7. keepalived+lvs实现高可用的负载均衡
  8. memcached—Memcache安全性
  9. 罗盘时钟制作代码_抖音超火的姓氏罗盘壁纸,安卓和苹果都能做
  10. windows安装python3步骤_windows下python3第三方库安装方法总结
  11. 137页Python学习笔记,全面总结看这一篇就够了
  12. Popclip插件:任务自动添加进 Microsoft ToDo的任务列表
  13. RedHat 网络配置
  14. 【计算理论】计算理论总结 ( 上下文无关文法 | 乔姆斯基范式 | 乔姆斯基范式转化步骤 | 示例 ) ★★
  15. 记忆力:魔方基础教程
  16. 航空插头的环境性能科普
  17. iOS 地图坐标系转换
  18. Connection could not be established with host smtp.163.com 阿星小栈
  19. ping oracle 地址,使用 ping 命令探测远程主机 - Oracle Solaris 管理:IP 服务
  20. 斐波那契数列和斐波那契数

热门文章

  1. 一般app测试的最佳方法
  2. 论文阅读笔记《Improving Unsupervised Defect Segmentation by Applying Structural Similarity To Autoencoders》
  3. 玩转Luat 进阶篇③——远程升级实现过程详解
  4. 系统设计面试题之 怎么设计一个打分系统
  5. java实现26个大写字母的遍历
  6. 投射数据卷Secret、ConfigMap、DownwardAPI
  7. Ubuntu下locale命令路径无法找到问题解决方法:Cannot set LC_CTYPE to default locale: No such file or directory
  8. 掌上电脑是不是微型计算机,《掌上电脑Vs.商务通》的背后
  9. mysql 统计七日留存率_用户七日留存率分析
  10. java 用户留存率_【java】mongodb 数据统计(留存率) 应该怎么实现?