в чем смысл?
Запрещает вам добавлять дополнительные вещи в их пространство имен , возможно, потому что они думают добавить гораздо больше имен в ближайшее время (и тот факт, что онииспользование версионного пространства имен может предложить это).Однако это только предположения.Это имеет побочный эффект - предотвращение предварительных объявлений в пространстве имен, которые вы считаете более разумными, поэтому я считаю, что это просто плохая практика программирования с их стороны.
Какой лучший способ справиться с этим?
Не самый лучший способ, но старайтесь избегать использования макросов, макросы некрасивые и не очень приятные для просмотра (мне не нравятся все эти заглавные буквы).Если вы беспокоитесь о том, "что происходит, когда они меняют версию?"(да, теоретически вы должны изменить «v44» на «v45» во всем вашем коде)
, а затем просто использовать 1 единственный заголовок для прямого объявления всего, что вам нужно.
TpLibForwards.hpp
#ifdef XXXXXX_TPLIB
#error "XXXXXX_TPLIB is already taken, change to something else"
#endif
#define XXXXXX_TPLIB tplib_v44
//... and that's why I don't like keeping macros around..
namespace XXXXXX_TPLIB
{
// FORWARD DECLARATIONS
class A1;
class A2;
//...
}
namespace tplib = XXXXXX_TPLIB;
#undef XXXXXX_TPLIB
Если они меняют библиотеку, то вам просто нужно применить 1 изменение и 1 файл.Многие программисты уже поддерживают переадресацию деклараций в одном месте, потому что это намного более управляемо, и в случае, если вам придется пересылать декларации, вы сохраняете других заголовков чище и намного более читабельными .
#include <TpLibForwards.hpp> // my forwards declarations