2010-03-23 19 views
7

Estoy trabajando en un proyecto en el que se usa una mezcla de C# (95%) y C++/CLI (5%).Espacios de nombres largos/compuestos al usar C++/CLI

La convención de nomenclatura de espacios de nombres a la que me refiero es la buena antigua Company.Technology.Etc.. Esto funciona perfectamente bien para C#. Ahora, ¿puedo llevar esto a clases de C++? Leí here que los espacios de nombres compuestos no son compatibles con C++.

estoy atascado con el torpe

namespace Company { 
    namespace Technology { 
     namespace Etc { 
      ... 
     } 
    } 
} 

con el fin de permanecer constante?

¿Vale la pena intentar ser consistente?

Respuesta

8

Sí, estás atrapado con él, mira esto link. En mi opinión, vale la pena usarlo, ya que es más legible y manejable usar espacios de nombres. Normalmente también lo hago en C++ nativo.

2

Arg! Hicimos eso aquí por algún código también. Odio eso.

¿Existe una gran confusión acerca de quién firma sus cheques? ¿Qué ocurre cuando Company es comprado por OtherCorp, o el departamento de comercialización decide que Technology se conocerá en adelante como eTech? ¿Cuánto código tendrá que cambiarse?

En general, soy antiuso. Pero en situaciones como esta, donde los espacios de nombres probablemente nunca debieron haber sido creados y usted se está guardando futuros cambios de código, animo la siguiente línea en lugar de colocar esa gran verruga delante de cada referencia:

using Company::Technology;

Los espacios de nombre generalmente deben crearse cuando tiene varias clases relacionadas y objetos que le tientan a mantener el mismo nombre en su identificador. De esta forma, en lugar de referirse a ellos como foo_operation y foo_class, haga foo::operation y foo::class.

2

Para definir los tipos en el espacio de nombres anidado, sí, tiene que hacerlo tal como lo describe. Pero a uso los tipos, intenta namespace CTE = Company::Technology::Etc; , entonces usted debería ser capaz de hacer por ejemplo CTE::SomeClass someClass;

1

La respuesta aceptada es en Visual Studio 2015 ya no es cierto.

Puede usar con todas las versiones adicionales el compilerflag/std: C++ más reciente y obtener los espacios de nombres anidados.