Читая о различных протоколах обмена сообщениями IoT, я натолкнулся на структуру, определенную ниже:
enum TempScale {
CELSIUM,
KELVIN,
FARENHEIT
};
struct TempSensorType {
short id;
float temp;
float hum;
TempScale scale;
};
#pragma keylist TempSensorType id
Мой вопрос: что это #pragma keylist Ключевое слово сделать и где я могу найти документацию по использованию #pragma директивы препроцессора (я считаю, что это такая директива ..).
Благодарю.
#Pragma, которую вы просматриваете, — это метод PrismTech для определения значения ключа в структуре типа OMG-DDS (Служба распространения данных для систем реального времени). В этом случае это определение короткого «id» в качестве ключевого значения. Сопоставимое определение РТИ будет
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 игнорирует клавишу // @.
Это изменится с будущими версиями спецификации для расширяемых типов, в которой будет определен стандартный метод поддержки для всех поставщиков.
Обратите внимание, что если вы просматривали общий список протоколов обмена сообщениями IoT, концепция значения «ключ» может не существовать в других протоколах обмена сообщениями, которые вы просматривали.
Обратите внимание, что явная спецификация списка ключей с помощью прагмы позволяет определить порядок в ключах, который — в зависимости от варианта использования — может оказать заметное влияние на производительность при поддержании (заполнение / чтение / запрос / фильтрация) «многомерного хранилище для dataReader (и / или durability-service)
Обратите внимание, что для реализаций DDS, которые соответствуют недавно принятой спецификации OMG DDS-XTYPES (http://www.omg.org/spec/DDS-XTypes/) стандартный портативный способ указания ключей:
struct SensorType {
@key short id;
float temp;
float hum;
TempScale scale;
}
Или в качестве альтернативы (чтобы не сломать компиляторы IDL, которые не понимают аннотации IDL):
struct SensorType {
short id; //@key
float temp;
float hum;
TempScale scale;
}