Troquei de C ++ para Java e C # e acho que o uso de namespaces / pacotes é muito melhor lá (bem estruturado). Então voltei para o C ++ e tentei usar namespaces da mesma maneira, mas a sintaxe necessária é horrível no arquivo de cabeçalho.
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
O seguinte parece estranho para mim também (para evitar o recuo profundo):
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
{
Existe uma maneira mais curta de expressar a coisa acima? Estou perdendo algo como
namespace MyCompany::MyModule::MyModulePart::...
{
public class MyClass
Atualizar
Ok, alguns dizem que o conceito de uso em Java / C # e C ++ é diferente. Realmente? Eu acho que o carregamento de classe (dinâmico) não é o único propósito para namespaces (esta é uma perspectiva muito técnica). Por que não devo usá-lo para uma legibilidade e estruturação, por exemplo, pense em "IntelliSense".
Atualmente, não há lógica / ligação entre um namespace e o que você pode encontrar nele. Java e C # fazem isso muito melhor ... Por que incluir <iostream>
e ter namespace std
? Ok, se você diz que a lógica deve depender do cabeçalho a ser incluído, por que o #include não usa uma sintaxe amigável "IntelliSense" como #include <std::io::stream>
ou <std/io/stream>
? Acho que a estruturação ausente nas bibliotecas padrão é um ponto fraco do C ++ em comparação com Java / C #.
Se a exclusividade para conflitos ávidos é um ponto (que é um ponto de C # e Java também), uma boa ideia é usar o nome do projeto ou o nome da empresa como namespace, você não acha?
Por um lado, diz-se que C ++ é o mais flexível ... mas todos disseram "não faça isso"? Parece-me que C ++ pode fazer muitas coisas, mas tem uma sintaxe horrível até mesmo para as coisas mais fáceis em muitos casos, em comparação com C #.
Atualização 2
A maioria dos usuários diz que é um absurdo criar um aninhamento mais profundo do que dois níveis. Ok, então o que dizer dos namespaces Windows :: UI :: Xaml e Windows :: UI :: Xaml :: Controls :: Primitives no desenvolvimento do Win8? Acho que o uso de namespaces pela Microsoft faz sentido e é mais profundo do que apenas 2 níveis. Acho que bibliotecas / projetos maiores precisam de um aninhamento mais profundo (odeio nomes de classes como ExtraLongClassNameBecauseEveryThingIsInTheSameNameSpace ... então você poderia colocar tudo no namespace global também.)
Atualização 3 - Conclusão
A maioria diz "não faça isso", mas ... mesmo o boost tem um aninhamento mais profundo do que um ou dois níveis. Sim, é uma biblioteca, mas: Se você deseja código reutilizável - trate seu próprio código como uma biblioteca que você daria a outra pessoa. Eu também uso um aninhamento mais profundo para fins de descoberta usando namespaces.
namespace
palavra-chave?