我正在使用两个 lib jsoncpp 和 imap(lib c-client)。
json cpp 有写功能。但在 imap lib 中,它们有一些宏#define write safe_write
覆盖 jsoncpp 中的一些宏。我无法同时使用这两个库。我怎样才能避免这种冲突?
假设您不使用 imap 中的 write 宏:
#include "imap.h"
#undef write
#include "jsoncpp.h"
最好的方法是将有问题的标头(此处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
.
只要您可以访问标头并且使用的是 lib 或 dll,#undef
只要您不使用宏,您就应该能够访问它。