首页 > 编程语言 >C++11 中 声明式的编程风格

C++11 中 声明式的编程风格

时间:2024-08-04 22:16:48浏览次数:12  
标签:11 作用域 代码 编程 C++ interface msg 表达式 lambda

// Set a target Pose
auto const target_pose = []{
  geometry_msgs::msg::Pose msg;
  msg.orientation.w = 1.0;
  msg.position.x = 0.28;
  msg.position.y = -0.2;
  msg.position.z = 0.5;
  return msg;
}();
move_group_interface.setPoseTarget(target_pose);

// Create a plan to that target pose
auto const [success, plan] = [&move_group_interface]{
  moveit::planning_interface::MoveGroupInterface::Plan msg;
  auto const ok = static_cast<bool>(move_group_interface.plan(msg));
  return std::make_pair(ok, msg);
}(); 这种声明式的风格有什么好处

这种声明式的编程风格,特别是在C++中,具有以下几个好处:

1. 提高代码可读性

通过使用lambda表达式和立即执行的函数对象,代码结构更加清晰,意图更加明确。例如,目标姿态和规划步骤的初始化和设置在一个块内完成,这样读者可以更容易地理解每个部分的用途。

2. 局部变量作用域

在lambda表达式中定义的变量只在lambda表达式的作用域内有效,这有助于避免变量在更大范围内的作用域污染,减少了意外修改的可能性,提高了代码的可维护性。

3. 减少临时变量

声明式风格中直接返回的方式减少了对临时变量的需求,从而减少了代码的复杂度和潜在的错误。通过将初始化和返回值的过程结合在一起,代码变得更加紧凑。

4. 增强代码模块化

每个lambda表达式都可以看作是一个独立的模块,执行特定的任务。这使得代码更易于测试和调试,因为每个模块的行为都是自包含的,可以单独验证。

5. 延迟执行

在某些情况下,声明式风格可以用于延迟执行某些操作,直到实际需要时才执行,这可以优化性能。例如,只有在需要计算规划时才进行规划,而不是在对象创建时立即进行。

6. 捕获上下文

lambda表达式可以捕获所在上下文的变量,使得代码更加灵活。通过捕获move_group_interface,lambda表达式可以访问并操作该对象,而不需要在更大的作用域内声明和使用它。

具体代码分析

  1. 设置目标姿态

    • 使用lambda表达式定义并返回一个目标姿态。
    • 这种方式使得目标姿态的定义和返回紧密结合,避免了不必要的变量暴露。
  2. 创建规划

    • 使用lambda表达式进行规划,并返回规划的结果和状态。
    • 这种方式确保了规划的逻辑集中在一起,易于理解和维护。

总结

这种声明式的编程风格通过使用lambda表达式和立即执行的函数对象,可以提高代码的可读性、减少变量作用域污染、减少临时变量、增强模块化、支持延迟执行,并灵活地捕获上下文。这些特性使得代码更加简洁、易于维护和理解。

标签:11,作用域,代码,编程,C++,interface,msg,表达式,lambda
From: https://www.cnblogs.com/ai-ldj/p/18342312

相关文章

  • 《802.11无线网络权威指南-无线网络导论》-- 读书笔记1
    专业术语发射塔:celltower,指信号发射塔基站,接入点:accesspoint无线数据网络:wirelessdatanetwork基站:basestationauthorization:授权,认证serviceprovider:服务供应商hotspot:热点WAN:广域网络infraredlight:红外线频带:frequencyband带宽:bandwidth,即可供使用的频率......
  • Ros2 Moveit2 第一个C++项目
     本教程将指导您使用MoveIt编写第一个C++应用程序。警告:MoveIt中的大多数功能将无法正常工作,因为完整的MoveGroup功能需要附加参数。如需完整设置,请继续阅读MoveGroupC++接口教程。先决条件如果您还没有这样做,请确保您已经完成入门指南中的步骤。本教程假设您了......
  • 【C++从小白到大牛】栈和队列(优先级队列)
    目录引言:使用方法篇:stack:queuepriority_queue使用方法:模拟实现篇:stack:原码:queue原码:priority_queue插入和删除数据的思想:仿函数实现比较原码:引言:本文主要讲解C++STL库中stack、queue、priority_queue的使用方法和模拟实现。我们首先需要对stack、queue进......
  • 套接字编程之socket的原理
    所谓套接字,其实就是socketsocket是干嘛用的呢?当我们写一个C/S架构的软件时,是需要实现客户端与服务端之间的网络通信的,不然你的客户端怎么和服务端建立连接呢?这个socket就是负责干这个事的。还记得OSI七层协议吗?如果是计算机科班出身的同学一定学过这个,没关系,哥带你回顾下到底什......
  • 希尔排序, 插入排序, 冒泡排序, 选择排序【C++】
    希尔排序,插入排序,冒泡排序,选择排序测试代码希尔排序选择排序冒泡排序插入排序测试代码#include<iostream>usingnamespacestd;intmain(){intarr[6]={0};intlen=sizeof(arr)/sizeof(int);for(inti=0;i<len;i++){......
  • c++编写生产者消费者模型
    直接上代码啦:#include<iostream>#include<queue>#include<thread>#include<mutex>#include<condition_variable>#include<stdexcept>//定义一个同步的队列类classSyncQueue{public:SyncQueue(size_tcapacity):max_capacity(c......
  • windows C++-通过 C++/WinRT 使用 API(三)
    统一构造在C++/WinRT版本2.0及更高版本中,有一种优化的构造形式可供你使用,它被称作“统一构造”(请参见C++/WinRT2.0中的新增功能和更改)。若要使用统一构造而不是winrt::make,你需要一个激活工厂。要生成激活工厂,一种好的方式是向IDL添加构造函数。//MainPage.idl......
  • 【ESP01开发实例】-ESP-01驱动DHT11和DH22传感器
    ESP-01驱动DHT11和DH22传感器文章目录ESP-01驱动DHT11和DH22传感器1、DHT11/DHT22传感器介绍2、LCD1602介绍3、硬件准备与接线4、代码实现本主题介绍如何使用DHT11和DHT22相对湿度和温度传感器与ESP8266ESP-01Wi-Fi模块,将相对湿度和温度的测量值显......
  • windows C++-通过 C++/WinRT 使用 API(二)
    延迟初始化在C++/WinRT中,每个类型都有一个特殊的C++/WinRTstd::nullptr_t构造函数。除了该构造函数,所有其他类型的构造函数(包括默认的构造函数)都会导致系统创建一个支持的Windows运行时对象,并为你提供它的智能指针。因此,该规则适用于使用默认构造函数的任何地方,例如......
  • 编程常用英语单词中英文对照表
    distributed美[dɪˈstrɪbjuːtɪd] 使分布;  分配;  分发;  分销;  分散;  使散开; program 美[ˈproʊɡræm] 程序;  编码指令; BASIS  基础;  标准;  基本;  ASIS 按原来的softwarepackage 美[ˈsɔːftwerpækɪdʒ......