我得到了将事件发布到某个事件队列的宏。
POST_(myTarget, event)
事件可以直接发布到本地队列,也可以序列化并发布到 I2C 服务的事件队列,该 I2C 服务将事件发送到另一个微控制器。接收服务是本地服务还是远程服务的定义如下:
#define myTarget_REMOTE
#define anotherTarget_LOCAL
我想做的是这样的(这当然是不允许的):
#define POST(target, e) \
#ifdef target##_REMOTE \
/* create a i2c request-event with serialized(e)
as parameter and post to I2c-Manager */
#else \
/* post directly */
POST_(target, event) \
#endif
所以,所有信息在编译时都在那里,但我不知道如何告诉预处理器该做什么。
- 我可以根据其本地/远程定义为每个目标创建两个宏,但这会很麻烦。
- 我可以在运行时进行测试,但这也是一个悲伤的故事。
编辑:
程序看起来更清晰的示例:
#define target1_LOCAL
#define target2_REMOTE
POST(target1, e) ==preprocessor==> POST_(target1, e)
POST(target2, e) ==preprocessor==>
do { \
req = createI2cRequest(serialize(e)); \
POST_(I2cManager, req); \
}while(0)
所以,在我刚刚使用的程序POST(target, event)
中,目标的位置是完全透明的。