如何避免两个头文件c ++中的冲突

时间:2011-03-16 16:08:25

标签: c++ jsoncpp

我正在使用两个lib jsoncpp和imap(lib c-client)。

json cpp具有写入功能。 但在imap lib中他们有一些宏#define write safe_write 这是从jsoncpp覆盖一些宏。 我无法同时使用这两个库。 我怎样才能避免这种冲突?

3 个答案:

答案 0 :(得分:3)

假设你没有使用来自imap的写宏:

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

答案 1 :(得分: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

答案 2 :(得分:1)

只要您可以访问标题并使用lib或dll,只要不使用宏,就可以#undef它。