Должны ли темы DDS быть определены одинаково для каждого участника домена?

Допустим, у меня есть тема, определенная как объединение в одной системе:

union MyType switch (letterId) {
    case a: TypeA typeA;
    case b: TypeB typeB;
    case c: TypeC typeC;
};

Но другая система не заинтересована в теме в том случае, если объединение отправляется в форме TypeC. Фактически, определение самого TypeC имеет большое количество зависимостей, и было бы удобнее просто его опустить. Могу ли я тогда определить тему в системе 2, так как она будет иметь то же имя?

union MyType switch (letterId) {
    case a: TypeA typeA;
    case b: TypeB typeB;
};

Разве это не сработает? Если это сработает, что произойдет, когда он получит TypeC?

1 ответ

Решение

Темы не обязательно должны быть определены одинаково для каждого участника домена. Спецификация OMG DDS-XTypes описывает, как типы тем могут содержать необязательные поля и как они могут быть расширены или изменены - или нет.

Чтобы DataWriters и DataReaders соответствовали друг другу, их типы должны быть совместимы в соответствии с разделом 7.2.4 Совместимость типов в спецификации. В этом же разделе определяются правила о том, как происходит присвоение между совместимыми типами, которые имеют разные определения.

Для типов объединения первая строка в Таблице 7.17 - Определение отношения is-assignable-from для агрегированных типов расскажет вам, что вы можете сделать с определением объединения, сохраняя его совместимость между различными версиями.

В качестве быстрой оценки: 7.2.2.4.4.5 Факультативные члены упоминают, что члены Союза, включая дискриминатора, никогда не должны быть факультативными, поэтому вам, возможно, придется найти творческое решение для вашей конкретной ситуации.

Обратите внимание, что не все поставщики DDS поддерживают систему типов XTypes.

Другие вопросы по тегам