当前位置: 首页 > news >正文

ros2-类继承,lambda,共享指针,多线程

类继承

cpp

#include "rclcpp/rclcpp.hpp"class PersonNode:public rclcpp::Node{private:std::string name_;int age_;public:PersonNode(const std::string &node_name, const std::string &name, const int &age):Node(node_name){  // 把nodename参数传进来,同时把nodename作为参数传给父类 相当于调用父类构造函数this->name_ = name;this->age_ = age;};void eat(const std::string &food_name){RCLCPP_INFO(this->get_logger(), "我是%s, %d岁, 爱吃%s", this->name_.c_str(), this->age_, food_name.c_str());};};int main(int argc, char** argv){rclcpp::init(argc, argv);auto node = std::make_shared<PersonNode>("person_node", "李斯", 18);// RCLCPP_INFO(node->get_logger(), "你好 c++节点");node->eat("ROS");rclcpp::spin(node);rclcpp::shutdown();return 0;
}

随后需要在cmake文件中增加可执行文件和link相关库

lambda

#include "iostream"
#include "algorithm"int main(){auto add = [](int a, int b) -> int{return a + b;};int sum = add(200 ,50);auto print_sum = [sum]() -> void{std::cout<<sum<<std::endl;};print_sum();
}

共享指针

#include "iostream"
#include "memory"int main(){auto p1 = std:: make_shared<std::string>("this is a ptr");  // std:: make_shared<数据类型/类>(参数); 返回值, 对应类的共享指针std::cout<<"p1的引用计数:" << p1.use_count() << " , 指向内存地址"<< p1.get()<<std::endl;auto p2 = p1;std::cout<<"p1的引用计数:" << p1.use_count() << " , 指向内存地址"<< p1.get()<<std::endl;std::cout<<"p2的引用计数:" << p2.use_count() << " , 指向内存地址"<< p2.get()<<std::endl;p1.reset(); // 释放引用std::cout<<"p1的引用计数:" << p1.use_count() << " , 指向内存地址"<< p1.get()<<std::endl;std::cout<<"p2的引用计数:" << p2.use_count() << " , 指向内存地址"<< p2.get()<<std::endl;std::cout<<"p2的指向内存地址数据:" <<p2->c_str() << std::endl;  }
cmake_minimum_required(VERSION 3.5)
project(demo_cpp_pkg)# Default to C99
if(NOT CMAKE_C_STANDARD)set(CMAKE_C_STANDARD 99)
endif()# Default to C++14
if(NOT CMAKE_CXX_STANDARD)set(CMAKE_CXX_STANDARD 14)
endif()if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")add_compile_options(-Wall -Wextra -Wpedantic)
endif()# find dependencies
find_package(ament_cmake REQUIRED)
# uncomment the following section in order to fill in
# further dependencies manually.
# find_package(<dependency> REQUIRED)find_package(rclcpp REQUIRED) # 直接查找到对应的头文件和库文件, REQUIRED 表示这个库为必须
add_executable(cpp_node src/cpp_node.cpp)
add_executable(person_node src/person_node.cpp)# target_include_directories(cpp_node PUBLIC ${rclcpp_INCLUDE_DIRS}) # 头文件包含
# target_link_libraries(cpp_node ${rclcpp_LIBRARIES}) # 库文件链接
ament_target_dependencies(cpp_node rclcpp)
ament_target_dependencies(person_node rclcpp)add_executable(learn_lambda src/learn_lambda.cpp)
add_executable(learn_shared_ptr src/learn_shared_ptr.cpp)install(TARGETS cpp_node person_node learn_shared_ptr learn_lambdaDESTINATION lib/${PROJECT_NAME}
) # 用于复制文件到installif(BUILD_TESTING)find_package(ament_lint_auto REQUIRED)# the following line skips the linter which checks for copyrights# uncomment the line when a copyright and license is not present in all source files#set(ament_cmake_copyright_FOUND TRUE)# the following line skips cpplint (only works in a git repo)# uncomment the line when this package is not in a git repo#set(ament_cmake_cpplint_FOUND TRUE)ament_lint_auto_find_test_dependencies()
endif()ament_package()

cmake文件,注意需要在install中将功能包名添加上

相关文章:

  • 【C++】C++的IO流
  • 数据结构学习笔记—初识数据结构
  • 【机器学习】线性回归和损失函数
  • 特征值与特征向量的计算——PCA的数学基础
  • Java SpringBoot 集成 SpringSecurity
  • BC27 计算球体的体积
  • VS2017编译openssl3.0.8
  • 【成品设计】STM32和UCOS-II的项目
  • 命令行登录 MySQL 报 Segmentation fault 故障解决
  • 博客系统功能测试
  • 如何轻松删除电脑上的文件(无法恢复文件)
  • 成功案例丨GEZE与Altair合作推动智能建筑系统开发
  • Nginx端口telnet不通排查指南
  • 解决 Linux Bash 脚本因换行符问题导致的 “bash^M: No such file or directory“ 错误
  • es快速上手(从MySQL角度)
  • Java 进阶 1.0.1
  • Java高频面试之并发编程-18
  • 五分钟本地部署大模型
  • “星睿O6”AI PC 开发套件评测: NPU 算力测评(1)
  • MySQL 锁机制深度剖析:全局锁、表锁与行锁
  • 国家发改委:系统谋划7方面53项配套举措,推动民营经济促进法落地见效
  • 美国恶劣天气已造成至少28人死亡
  • 第十届青春文学奖揭晓,梁晓声获特别奖
  • 贞丰古城:新垣旧梦间的商脉与烟火
  • A股三大股指低收:汽车股领涨,大金融走弱,两市成交近1.1万亿元
  • 淄博一酒店房间内被曝发现摄像头,当地警方已立案调查