Как избежать конфликта в двух заголовочных файлах C++

Я использую два lib jsoncpp и imap (lib c-client).

json cpp имеет функцию записи. но в lib imap у них есть макрос #define write safe_writeкоторый переопределяет некоторый макрос из jsoncpp . Я не могу использовать обе библиотеки одновременно. как я могу избежать этого конфликта?

3 ответа

Решение

Предполагая, что вы не используете макрос записи из 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,

Пока у вас есть доступ к заголовкам и вы используете lib или dll, вы должны иметь возможность #undef это, пока вы не используете макрос.

Другие вопросы по тегам