首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ROS2动态消息模板

ROS2动态消息模板
EN

Stack Overflow用户
提问于 2020-02-18 15:37:37
回答 1查看 667关注 0票数 1

我有一个关于ROS2消息的问题,或者可能只是一个标准的C++,也许你们中的一个曾经尝试过类似的东西,或者可以告诉我,我想要完成的事情不会奏效。

我试图创建的是一个库,我可以使用它快速创建一个ROS2节点,在启动节点之前根据情况动态地添加发布者和/或订阅者。我面临的问题是ROS2使用像std_msgs::msg::String这样的消息类型。示例源可以在github上找到。源代码使用以下代码创建订阅服务器:

代码语言:javascript
复制
subscription_ = this->create_subscription<std_msgs::msg::String>("topic", 10, std::bind(&MinimalSubscriber::topic_callback, this, _1));

我想要创建一个函数,它可以使用给定的消息类型创建订阅者,即:

代码语言:javascript
复制
void createListener(std::string topicName, 'messagetype')
{
    auto subscription_ = this->create_subscription<'messagetype'>(topicname, 10, [this]{}, this, _1));
    //adding the created subscriber to a list is already done
}

这将允许我使用相同的函数,同时仍然能够使用以下不同的消息:

代码语言:javascript
复制
nav_msgs::msg::Path
geometry_msgs::msg::Point

而不必为每个消息类型创建一个新函数。我似乎找不到在create_subscribtion<>()函数中使用的模板类型,我所能找到的就是每个消息都创建自己的类型。std_msgs::msg::String将返回std_msgs::msg::String_<std::allocator<void>>类型。

有什么办法能让这件事成功吗?

EN

回答 1

Stack Overflow用户

发布于 2022-10-17 11:17:01

您可以在这里正确地使用模板,方法如下:

代码语言:javascript
复制
template <typename MsgType>
void createListener(std::string topicName)
{
    auto subscription_ = this->create_subscription<MsgType>(topicname, 10, [this]{}, this, _1));
    //adding the created subscriber to a list is already done
}

然后可以调用此函数,例如:

代码语言:javascript
复制
createListener<nav_msgs::msg::Path>("topicName")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60284498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档