〖ROS2 源码解析〗rclcpp_action/include/rclcpp_action/create_server.hpp 正在进行1. `create_server`

一、 自定义 c++模板类函数模板

假设我们有一个简单的类模板 MyClass,它包含了一个 std::shared_ptr 类型的嵌套类型定义 SharedPtr,并且我们要定义一个函数来创建并返回这个类的共享指针。

示例代码

#include <iostream>
#include <memory>

// 定义一个模板类 MyClass,包含一个嵌套类型 SharedPtr
template<typename T>
class MyClass {
   
public:
    using SharedPtr = std::shared_ptr<MyClass<T>>;  // 定义共享指针类型
    MyClass(T value) : value_(value) {
   }  // 构造函数
    void show() const {
    std::cout << "Value: " << value_ << std::endl; }
private:
    T value_;
};

// 定义一个函数模板,用于创建并返回 MyClass<T> 的共享指针
template<typename T>
typename MyClass<T>::SharedPtr create_instance(T value) {
   
    // 创建 MyClass<T> 对象,并返回一个共享指针
    return std::make_shared<MyClass<T>>(value);
}

int main() {
   
    // 使用 create_instance 函数创建 MyClass<int> 的实例
    auto instance = create_instance(42);

    // 使用 instance 指针调用 show 方法
    instance->show();  // 输出: Value: 42

    return 0;
}

代码解析

  1. 模板类 MyClass:

    template<typename T>
    class MyClass {
         
    public:
        using SharedPtr = std::shared_ptr<MyClass<T>>;  // 定义共享指针类型
        MyClass(T value) : value_(value) {
         }  // 构造函数
        void show() const {
          std::cout << "Value: " << value_ << std::endl; }
    private:
        T value_;
    };
    
    • MyClass 是一个模板类,它包含一个类型别名 SharedPtr,表示 std::shared_ptr<MyClass<T>> 类型的共享指针。
    • 类中有一个成员变量 value_,用于存储传递进来的值,并提供了一个 show() 方法来显示这个值。
  2. 函数模板 create_instance:

    template<typename T>
    typename MyClass<T>::SharedPtr create_instance(T value) {
         
        // 创建 MyClass<T> 对象,并返回一个共享指针
        return std::make_shared<MyClass<T>>(value);
    }
    
    • create_instance 是一个函数模板,用于创建并返回 MyClass<T> 的共享指针。
    • typename MyClass<T>::SharedPtr 表示函数返回 MyClass<T> 的共享指针。
  3. 使用示例:

    int main() {
         
        // 使用 create_instance 函数创建 MyClass<int> 的实例
        auto instance = create_instance(42);
    
        // 使用 instance 指针调用 show 方法
        instance->show();  // 输出: Value: 42
    
        return 0;
    }
    
    • main() 函数中,我们调用 create_instance(42) 来创建一个 MyClass<int> 类型的实例,并返回一个指向该实例的共享指针。
    • 然后我们通过 instance->show() 调用 MyClassshow() 方法,输出值为 42

二、 create_server.hpp

// Copyright 2018 Open Source Robotics Foundation, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef RCLCPP_ACTION__CREATE_SERVER_HPP_
#define RCLCPP_ACTION__CREATE_SERVER_HPP_

#include <rcl_action/action_server.h>

#include <rclcpp/node.hpp>
#include <rclcpp/node_interfaces/node_base_interface.hpp>
#include <rclcpp/node_interfaces/node_clock_interface.hpp>
#include <rclcpp/node_interfaces/node_logging_interface.hpp>
#include <rclcpp/node_interfaces/node_waitables_interface.hpp>

#include <memory>
#include <string>

#include "rclcpp_action/server.hpp"
#<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值