一、 自定义 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;
}
代码解析
-
模板类
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()
方法来显示这个值。
-
函数模板
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>
的共享指针。
-
使用示例:
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()
调用MyClass
的show()
方法,输出值为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"
#<