【问题标题】:What does pragma keylist keyword do?pragma keylist 关键字有什么作用?
【发布时间】:2015-07-21 19:35:14
【问题描述】:

在阅读各种 IoT 消息传递协议时,我发现了一个定义如下的结构:

enum TempScale {
   CELSIUM,
   KELVIN,
   FARENHEIT
};

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

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

谢谢。

【问题讨论】:

  • 哪个特定的编译器(版本)?
  • #pragma 的任何使用均严格实现定义。这确实是#pragma目的。所以 only 放置任何 #pragma could 是编译器手册。 (#pragma 严格来说是不可移植的应该是显而易见的。)
  • 感谢 DevSolar。这让我查看了 clang 和 gcc 文档并在那里搜索编译指示。

标签: c++ pragma iot data-distribution-service


【解决方案1】:

您正在查看的#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 编译器会忽略 pragma,而 PT 编译器会忽略 //@key。

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2018-05-07
        • 2019-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-15
        • 2019-10-19
        相关资源
        最近更新 更多