1

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

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

4

3 回答 3

3

假设您不使用 imap 中的 write 宏:

#include "imap.h"
#undef write
#include "jsoncpp.h"
于 2011-03-16T16:20:32.573 回答
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.

于 2011-03-16T16:27:23.383 回答
1

只要您可以访问标头并且使用的是 lib 或 dll,#undef只要您不使用宏,您就应该能够访问它。

于 2011-03-16T16:13:51.003 回答