ROS与C++入门教程-消息-Traits(特征)
ROS与C++入门教程-消息-Traits(特征)
说明:
- 介绍消息Traits及使用
Message Traits(消息特征)
- 在ROS的C Turtle版本新添加
- Message traits (和message_traits 命名空间)允许你查询消息中的某种信息。
- 主要用来适配 C++ types 到ROS的msg types, 同时也方便获取消息的信息,例如:datatype, md5sum和消息定义
- 所有的traits必需定义在命名空间ros::message_traits
发布和订阅的要求的特征
template<typename M>
struct MD5Sum
{
static const char* value();
static const char* value(const M& m);
};
template<typename M>
struct DataType
{
static const char* value();
static const char* value(const M& m);
};
template<typename M>
struct Definition
{
static const char* value();
static const char* value(const M& m);
};
- 为了向后兼容,这些默认返回值如__s_getmd5sum() / __getmd5sum()。
Optional Traits(可选特征)
template
struct IsSimple; - 一个“Simple”的消息是,给定一个向量或数组,可以直接拷贝
- 请注意:由于各种编译器填充规则,你需要标记结构为Simple,要非常小心。
- 对于simple struct A,A是POD类型, sizeof(A)必需等于它的成员序列化长度和。
template
struct IsFixedSize; - 一个固定大小的消息是一个始终是相同大小。用于优化确定一个向量/数组M的大小。
template
struct HasHeader; - 说明 M 是否有header
要改变为True,你可以简单为你的消息指定和继承TrueType替换FalseType。
template<typename M>
struct Header
{
static roslib::Header* pointer(M& m);
static roslib::Header const* pointer(const M& m);
};
- 返回指向消息的header的指针.如果HasHeader
::value为True,默认是返回&m.header ,如果是false,则返回NULL
template<typename M>
struct FrameId
{
static std::string* pointer(M& m);
static std::string const* pointer(const M& m);
static std::string value(const M& m);
};
- 返回消息的帧ID,如要求的指针或值类型。
template<typename M>
struct TimeStamp
{
static ros::Time* pointer(M& m);
static ros::Time const* pointer(const M& m);
static ros::Time value(const M& m);
};
返回消息的时间戳,如要求的指针或值类型。
IsSimple, IsFixedSize 和HasHeader 能用于编译时间,默认是执行:
template<typename M> struct IsSimple : public FalseType {};
- FalseType/TrueType提供bool的常量value和type typedef ,支持使用boost mpl 和enable_if 。
FalseType::value = false
FalseType::type = FalseType
TrueType::value = true
TrueType::type = TrueType
函数访问
Function |
Return Value |
md5sum<M>() |
MD5Sum<M>::value() |
md5sum<M>(const M& m) |
MD5Sum<M>::value(m) |
datatype<M>() |
DataType<M>::value() |
datatype<M>(const M& m) |
DataType<M>::value(m) |
definition<M>() |
Definition<M>::value() |
definition<M>(const M& m) |
Definition<M>::value(m) |
hasHeader<M>() |
HasHeader<M>::value |
isSimple<M>() |
IsSimple<M>::value |
isFixedSize<M>() |
IsFixedSize<M>::value |
header<M>(M& m) |
Header<M>::pointer(m) |
frameId<M>(M& m) |
FrameId<M>::pointer(m) |
timeStamp<M>(M& m) |
TimeStamp<M>::pointer(m) |
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号