如何在RTI DDS内容过滤主题中过滤嵌套联合的b.x>10?
问题描述
我定义了如下数据类型:
enum T1 { A, B }; enum T2 { C, D }; union T3 switch(T1) { case A: uint8 x; case B: uint8 y; }; union T4 switch(T2) { case C: uint8 a; case D: T3 b; };
现使用T4作为数据类型,请问是否存在方法在RTI DDS内容过滤主题中实现b.x>10的过滤?
解决方案
可以实现该过滤逻辑,但必须结合联合的判别式(switch字段)做前置条件判断,确保仅在对应联合分支激活时访问目标成员,避免无效访问导致的逻辑错误。
具体过滤表达式需要三层条件组合:
- 确认
T4的判别式为D(仅该分支下存在b成员); - 确认
T3的判别式为A(仅该分支下T3存在x成员); - 最后判断
b.x > 10。
对应的过滤表达式如下:
T4.switch = D AND T4.b.switch = A AND T4.b.x > 10
关键说明
- RTI DDS内容过滤主题支持访问嵌套联合的成员,但必须先通过判别式确认当前激活的分支,否则联合处于其他分支时,访问未激活成员会引发未定义行为,过滤结果不可靠。
- 上述表达式中的
switch是联合默认的判别式字段名,若你在IDL中为判别式指定了自定义名称,需替换为对应名称。
内容的提问来源于stack exchange,提问作者Invisible_man
相关产品推荐
相关产品推荐

