私は 2 つの lib jsoncpp と imap (lib c-client) を使用しています。
json cppには書き込み機能があります。しかし、imap libには#define write safe_write
、 jsoncpp のマクロをオーバーライドするマクロがあります。両方のライブラリを同時に使用することはできません。どうすればこの競合を回避できますか?
imap から書き込みマクロを使用しないと仮定します。
#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
。
#undef
ヘッダーにアクセスでき、lib または dll を使用している限り、マクロを使用しない限り、アクセスできるはずです。