Класс A использует библиотеку, написанную в C. Эта библиотека предоставляет некоторые типы данных и константы, которые используются в A. К сожалению, библиотека также определяет макросы в своем заголовочном файле, которые сталкиваются с моим кодом на С++ в main.cpp или в других классах с использованием A.
Как я могу предотвратить выполнение макросов c_library.h, когда A.h где-то включен? Я также был бы открыт для архитектурных изменений, но я бы предпочел не прикасаться к библиотеке C.
Конечно, есть директива #undef. Но это означало бы большую ручную работу для каждого макроса или для каждого столкновения. (Хорошо, их не так уж много, но эй, это должно быть возможно более элегантно?)
код:
//main.cpp
#include "A.h"
...
A a(...)
...
std::max(x, y); // oops, problem since max is defined as macro in c_library.h
...
//A.h
#include "c_library.h"
class A{
public:
A(...);
static void callbackForCLibrary(datatypeOfCLibrary d){...}
private:
private datatypeOfCLibrary1;
private datatypeOfCLibrary2;
}