Estoy usando una biblioteca de terceros C++ que coloca todas sus clases en un espacio de nombres versionado, llamémoslo tplib_v44
. También definen un espacio de nombres genéricos de alias:Alias de espacio de nombres C++ y declaración directa
namespace tplib = tplib_v44;
Si una visión de declarar un miembro de la biblioteca en mi propio archivo .h utilizando el espacio de nombres genéricos ...
namespace tplib { class SomeClassInTpLib; }
... consigo errores de compilación en la cabecera de la biblioteca de terceros (que está siendo incluido más tarde en mi archivo de aplicación .cpp):
error C2386: 'tplib' : a symbol with this name already exists in the current scope
Si utilizo el espacio de nombres específica de la versión, entonces todo funciona bien, pero luego .. w ¿ese es el punto? ¿Cuál es la mejor manera de lidiar con esto?
[EDITAR] FYI para los lectores futuros, esta era la biblioteca de la ICU. Una solución (al menos en mi situación) está en los comentarios a la respuesta aceptada.
Esto estuvo muy cerca de lo que terminó funcionando para mí. Al final resultó que, mi biblioteca (la biblioteca de la ICU) tiene un encabezado pequeño (uversion.h) que, entre otras cosas, define el alias del espacio de nombres. Si incluyo este encabezado en mi encabezado, puedo usar una macro del espacio de nombres versionado que definen (U_ICU_NAMESPACE) en mi archivo de encabezado y me escapo con el espacio de nombres genérico en mis archivos cpp. Por lo tanto, estoy aislado de los cambios en el espacio de nombres versionado pero con dependencias mínimas en tiempo de compilación. –