3

在阅读各种物联网消息协议时,我遇到了一个定义如下的结构:

enum TempScale {
   CELSIUM,
   KELVIN,
   FARENHEIT
};

struct TempSensorType {
   short id;
   float temp;
   float hum;
   TempScale scale;
};
#pragma keylist TempSensorType id

我的问题是:这个#pragma keylist关键字有什么作用,我在哪里可以找到一些关于使用#pragma预处理器指令的文档(我相信它就是这样的指令......)。

谢谢。

4

3 回答 3

4

您正在查看的#pragma 是用于在 OMG-DDS(实时系统数据分发服务)类型结构中定义键值的 PrismTech 方法。在这种情况下,它将短“id”定义为键值。可比较的 RTI 定义为

struct TempSensorType {
    short id; //@key
    float temp;
    float hum;
    TempScale scale;
}

对于供应商实现之间的互操作性,您可以安全地做

struct TempSensorType {
    short id; //@key
    float temp;
    float hum;
    TempScale scale;
}
#pragma keylist TempSensorType id

因为 RTI 编译器忽略了编译指示,而 PT 编译器忽略了 //@key。

这将随着可扩展类型规范的未来版本而改变,它将为所有供应商定义一个标准方法来支持。

请注意,如果您正在查看 IoT 消息传递协议的通用列表,那么您正在查看的其他消息传递协议中可能不存在“键”值的概念。

于 2015-07-21T21:09:35.913 回答
1

请注意,对于符合最近采用的 OMG DDS-XTYPES 规范 ( http://www.omg.org/spec/DDS-XTypes/ ) 的 DDS 实现,指定密钥的标准可移植方式是:

struct SensorType {
    @key short id;
    float temp;
    float hum;
    TempScale scale;
}

或者(为了避免破坏不理解 IDL 注释的 IDL 编译器):

struct SensorType {
    short id; //@key
    float temp;
    float hum;
    TempScale scale;
}
于 2015-07-23T03:07:26.590 回答
0

请注意,通过 pragma 的显式键列表规范允许在键中定义排序 - 根据用例 - 可能对维护(填充/读取/查询/过滤)“多维-数据读取器(和/或持久性服务)的存储空间

于 2015-07-22T10:41:30.697 回答