我已经获得了两个包含两个同名typedef的头文件.
我们来说aaa.h和bbb.h. 它们来自2个不相关的第三方软件包,我无法控制这两个文件,但必须使用它们.我没有直接包含这两个文件,但它们相当包含在顶级头文件中.(即我包括分别包含它们的ah和bh)
由于名称冲突,我的程序不会被编译.
所以我的临时解决方案是将aaa.h复制到我的源代码树中,只删除了typedef,名为myaaa.h.在文件的顶部,我保留了"#ifndef AAA_H,#define AAA_H"包装器,所以当我包含myaaa.h时,由于AAA_H标志已经定义,因此不会包含aaa.h,间接删除了typedef冲突.
有没有一种更聪明的方法来做这个而不添加这样的文件(我必须对它进行版本控制)到我的源代码?
谢谢!
更具体地说我的应用程序:共享数据主要是持久性数据,例如监视状态,配置 - 不超过几百个项目,并且经常更新和读取但不超过1或2Hz.这些进程在同一台机器上是彼此本地的.
编辑1:更多信息 - 期望进程轮询他们感兴趣的一组数据(即监视)大多数数据在程序的生命周期内是持久的,但是一些(例如配置)需要在之后恢复软件重启.数据仅由所有者更新(假设每个数据为一个所有者)进程数量也很小(不超过10个)
虽然使用数据库显然更加可靠和可扩展,但在我看来,当我使用数据库时,在使用应用程序时共享数据时,它总是有点过分或过于繁重.而消息传递与例如.JMS也有中间件部分,但它更轻量级,并且具有更自然或灵活的通信API.我认为实现事件通知和命令模式也更容易.
如果有人能给我一个例子,说明哪一种情况会比另一种情况更可取,那将是非常有帮助的.
例如,我知道我们可以更容易地使用数据库在进程之间共享持久数据,尽管它也可以通过跨进程分发和/或与某些XML文件一起存储来实现消息传递.
根据这里,http://en.wikipedia.org/wiki/Database-as-IPC和http://tripatlas.com/Database_as_an_IPC.它表示在用于代替消息传递时它是一种反模式,但它没有详细说明,例如.与消息传递相比,使用数据库的性能有多糟糕.
我已经通过几个问过类似问题的帖子,但我希望找到一个专注于设计理由的答案.但是从我到目前为止阅读的那些问题中我可以看到很多人确实使用数据库进行IPC(或者用数据库实现了消息队列)
谢谢!