从 IDL(使用 cyclonedds-cxx)生成的 *_DCPS.hpp 文件中的元信息是什么?
What is the meta information in a *_DCPS.hpp file generated from an IDL (using 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
和 copyOutFunction
指的是将样本从 C++ 表示复制到内部表示并返回的函数。对于 C++ API 的初始提交,此内部表示实际上是 C 表示中的样本,之后它被转换 to/from CDR。新版本取消了这些功能,避免了这种复制。
我使用 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
和 copyOutFunction
指的是将样本从 C++ 表示复制到内部表示并返回的函数。对于 C++ API 的初始提交,此内部表示实际上是 C 表示中的样本,之后它被转换 to/from CDR。新版本取消了这些功能,避免了这种复制。