Как избежать конфликта в двух заголовочных файлах 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
это, пока вы не используете макрос.