roscpp/Overview/MessagesTraits
1.消息特征MessagesTraits
新的C龟
消息特征(和message_traits名称空间)允许您查询有关消息的某些信息。它们主要用于允许将C++类型适配到ROS msg类型,但也可用于从消息中检索信息,如数据类型,md5sum或完整的消息定义。
所有特征必须在命名空间ros :: message_traits中定义
1.1广告/订阅所需的特征
1template<typenameM>
2structMD5Sum
3{
4 staticconstchar* value();
5 staticconstchar* value(constM& m);
6};
8template<typenameM>
9structDataType
10{
11 staticconstchar* value();
12 staticconstchar* value(constM& m);
13};
15template<typenameM>
16structDefinition
17{
18 staticconstchar* value();
19 staticconstchar* value(constM& m);
20};
为了向后兼容,这些默认为返回例如__s_getMD5Sum() / __getMD5Sum()的值。
1.2可选性状Message Traits
- template<typename M> struct IsSimple;
一个“简单”消息是一个给定一个向量/数组的,可以直接memcpy的。请注意,由于各种编译器的填充规则,您需要非常小心地将结构标记为简单。对于简单的结构A,A必须是POD类型,sizeof(A)必须等于每个成员的序列化长度之和。
- template<typename M> struct IsFixedSize;
固定大小的消息是始终具有相同大小的消息。用于优化确定M的向量/数组的大小。
- template<typename M> struct HasHeader;
告诉M是否有头。
要将其更改为true,您只需专门处理您的消息,并从TrueType而不是FalseType继承。
1template<typenameM>
2structHeader
3{
4 staticroslib::Header* pointer(M& m);
5 staticroslib::Headerconst* pointer(constM& m);
6};
返回指向消息头部的指针。默认情况下,如果HasHeader<M> :: value为true,则返回&m.header;如果为false,则返回NULL。
1template<typenameM>
2structTimeStamp
3{
4 staticros::Time* pointer(M& m);
5 staticros::Timeconst* pointer(constM& m);
6 staticros::Timevalue(constM& m);
7};
根据请求返回消息的帧ID,作为指针或值类型。
1template<typenameM>
2structTimeStamp
3{
4 staticros::Time* pointer(M& m);
5 staticros::Timeconst* pointer(constM& m);
6 staticros::Timevalue(constM& m);
7};
根据请求返回消息的时间戳,作为指针或值类型。
IsSimple,IsFixedSize和HasHeader可以在编译时使用。他们的默认实现是:
1template < typename M > struct IsSimple:public FalseType {};
FalseType / TrueType提供一个bool整型常量值和一个类型 typedef来支持boostmpl和enable_if的使用
- FalseType :: value = false
- FalseType :: type = FalseType
- TrueType :: value = true
- TrueType :: type = TrueType
1.3函数访问器Function Accessors
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) |