pragma keylist 关键字有什么作用?

What does pragma keylist keyword do?

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

enum TempScale {
   CELSIUM,
   KELVIN,
   FARENHEIT
};

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

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

谢谢。

您正在查看的#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 消息传递协议的通用列表,"key" 值的概念可能不存在于您正在查看的其他消息传递协议中。

请注意,通过 pragma 的显式键列表规范允许定义键中的顺序 - 根据用例 - 可能对维护(filling/reading/querying/filtering)'multi-dimensional-storage' 用于数据读取器(and/or 持久性服务)

请注意,对于符合最近采用的 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;
}