Вы можете создавать свои собственные заголовки-обертки, которые включают заголовок библиотеки при переносе его в пространство имен.
например, для любого заданного заголовка <brokenlib.h>
создайте "mybrokenlib.h"
, который выглядит следующим образом:
#ifndef MY_WRAPPER_HEADER_H
#define MY_WRAPPER_HEADER_H 1
namespace brokenlib
{
#include <brokenlib.h>
}
#endif
Очевидно, что заголовок все еще будет содержать оператор using, но теперь он будет вставлять символыиз std
в пространство имен brokenlib
вместо глобального пространства имен.
Надеюсь, в библиотеке не так много точек входа, которые нужно обернуть.
РЕДАКТИРОВАТЬ: Как отметил Дэвид Родригес, это работает, только если библиотеки, которые вы используете, только для заголовков.Единственное верное решение - исправить библиотеки (надеюсь, они с открытым исходным кодом?)