2011-03-16 80 views
1

我使用两个lib jsoncpp和imap(lib c-client)。如何在两个头文件中避免冲突C++

json cpp具有写入功能。 但在imap库中它们有一些宏,它们覆盖了jsoncpp中的一些宏。 我无法同时使用这两个库。 我该如何避免这种冲突?

+0

我不确定这会工作,但也许'#include'他们在命名空间? – Maxpm 2011-03-16 16:15:53

+0

@Maxpm先生您可以举一个例子吗? – 2011-03-16 16:20:55

+4

@Maxpm:宏不关心名称空间。这是他们是邪恶的原因之一:) – 2011-03-16 16:22:20

回答

3

假如你不使用写宏从IMAP:

#include "imap.h" 
#undef write 
#include "jsoncpp.h" 
1

只要你有权访问头文件,并且你正在使用lib或dll,只要你不使用这个宏,你应该可以使用#undef它。

2

继续进行下去的最佳方式是在会表现“更好”的标题(这里imap)封装违规头。

请注意,#define实际上是一个懒惰的内嵌函数。您需要识别safe_write的所有声明,并在相同的命名空间中提供适当的重载。

// my_imap.h 
#include "imap.h" 
#undef write 

inline void write(FILE* file, char* content, size_t size) { 
    safe_write(file, content, size); 
} 

// ... 

然后包括my_imap.h,而不是imap.h