metadata - 从 IDL 生成的 *_DCPS.hpp 文件中的元信息是什么(使用 cyclonedds-cxx)?
问题描述
我使用 cyclonedds-cxx 和他们的 IDL 编译器来翻译 IDL 文件以供 cyclonedds-cxx 使用。我有这个 IDL 文件:
#ifndef TRANSPORTDATA_IDL
#define TRANSPORTDATA_IDL
#include "Transform_.idl"
module TransportData
{
struct Data
{
long userID; //@key
geometry_msgs::msg::dds_::Transform_ transform_;
};
#pragma keylist Data userID
};
#endif // TRANSPORTDATA_IDL
此 IDL 文件被转换为 Transportdata_DCPS.hpp,如下所示:
#ifndef ISOCPP2_TRANSPORTDATA_H
#define ISOCPP2_TRANSPORTDATA_H
#include "dds/dds.hpp"
#include "TransportData.h"
#include "TransportDataSplDcps.h"
#include "org/eclipse/cyclonedds/topic/TopicTraits.hpp"
#include "org/eclipse/cyclonedds/topic/DataRepresentation.hpp"
namespace org { namespace eclipse { namespace cyclonedds { namespace topic {
template <>
class TopicTraits<TransportData::Data>
{
public:
static ::org::eclipse::cyclonedds::topic::DataRepresentationId_t getDataRepresentationId()
{
return ::org::eclipse::cyclonedds::topic::OSPL_REPRESENTATION;
}
static ::std::vector<uint8_t> getMetaData()
{
return ::std::vector<uint8_t>();
}
static ::std::vector<uint8_t> getTypeHash()
{
return ::std::vector<uint8_t>();
}
static ::std::vector<uint8_t> getExtentions()
{
return ::std::vector<uint8_t>();
}
static const char *getKeyList()
{
return "userID";
}
static const char *getTypeName()
{
return "TransportData::Data";
}
static const dds_topic_descriptor_t *getDescriptor()
{
return &TransportData_Data_desc;
}
static copyInFunction getCopyIn()
{
return (copyInFunction) __TransportData_Data__copyIn;
}
static copyOutFunction getCopyOut()
{
return (copyOutFunction) __TransportData_Data__copyOut;
}
static size_t getSampleSize()
{
return sizeof(TransportData_Data);
}
};
}}}}
namespace dds { namespace topic {
template <>
struct topic_type_name<TransportData::Data>
{
static std::string value()
{
return org::eclipse::cyclonedds::topic::TopicTraits<TransportData::Data>::getTypeName();
}
};
}}
REGISTER_TOPIC_TYPE(TransportData::Data)
#endif /* ISOCPP_TRANSPORTDATA_H */
我对此有三个问题:
- 我在哪里可以找到元信息的文档?
- DDS 标准是否保证此元信息存在?
- 是什么
copyInFunction
和copyOutFunction
为了什么?
解决方案
这都是特定于实现的,并且使用 Cyclone 的新 IDL 编译器,输出将完全改变,甚至消除大部分生成的文件。
这里的copyInFunction
andcopyOutFunction
是指将样本从 C++ 表示复制到内部表示并返回的函数。对于 C++ API 的初始提交,这个内部表示实际上是 C 表示中的样本,之后它被转换为 CDR 或从 CDR 转换。新版本取消了这些功能并避免了这种复制。
推荐阅读
- python - 在 python 中从 2 个不同大小的元组创建字典
- css - CSS @keyframes translate3d 兼容性
- python - 将数据从 Dataframe A 中的一行复制到 python/pandas 中 Dataframe B 中的特定行
- javascript - Javascript自动增量代码不起作用
- elasticsearch - 从独立迁移到 Elasticsearch 的集群实例
- python - Ropsten 网络中禁止 Etherscan API 请求 403
- go - go concurrency 串行打印
- linux - 从 Linux 的 power BI XMLA 端点获取数据
- java - 微服务系统中的 Spring Cloud 版本
- r - 为什么我在 R 中遇到这个错误以进行优化?“您的环境中有一些变量会干扰您定义的模型变量:x,y”