Eu concordo com os outros - está pedindo conflitos de nome, ambiguidades e, em seguida, o fato é que é menos explícito. Embora eu possa ver o uso de using
, minha preferência pessoal é limitá-lo. Eu também consideraria fortemente o que alguns outros apontaram:
Se você deseja encontrar um nome de função que possa ser um nome bastante comum, mas somente no std
espaço para nome (ou o inverso - você deseja alterar todas as chamadas que não estão no espaço para nome std
, espaço para nome X
, ...), então como você se propõe a fazer isso?
Você poderia escrever um programa para fazê-lo, mas não seria melhor gastar tempo trabalhando no seu projeto em vez de escrever um programa para mantê-lo?
Pessoalmente, na verdade não me importo com o std::
prefixo. Eu gosto do visual mais do que não tê-lo. Não sei se é porque é explícito e me diz "esse não é o meu código ... estou usando a biblioteca padrão" ou se é outra coisa, mas acho que parece melhor. Isso pode ser estranho, já que eu entrei recentemente em C ++ (usei e ainda faço C e outras linguagens por muito mais tempo e C é minha linguagem favorita de todos os tempos, logo acima do assembly).
Há uma outra coisa, embora esteja um pouco relacionada ao que foi dito acima e ao que outros apontam. Embora isso possa ser uma prática ruim, às vezes eu reservo std::name
a versão da biblioteca padrão e o nome da implementação específica do programa. Sim, de fato, isso pode te morder e te morder com força, mas tudo se resume ao fato de eu ter iniciado esse projeto do zero, e eu sou o único programador para ele. Exemplo: eu sobrecarrego std::string
e chamo string
. Eu tenho adições úteis. Eu fiz isso em parte por causa da minha tendência C e Unix (+ Linux) para nomes em letras minúsculas.
Além disso, você pode ter alias de namespace. Aqui está um exemplo de onde é útil que pode não ter sido referido. Eu uso o padrão C ++ 11 e especificamente com libstdc ++. Bem, ele não tem std::regex
suporte completo . Certamente, ele compila, mas gera uma exceção ao longo das linhas de ser um erro no final do programador. Mas é falta de implementação.
Então, aqui está como eu resolvi isso. Instale a regex do Boost e vincule-a. Em seguida, faça o seguinte para que, quando o libstdc ++ for totalmente implementado, eu precise apenas remover esse bloco e o código permanecer o mesmo:
namespace std
{
using boost::regex;
using boost::regex_error;
using boost::regex_replace;
using boost::regex_search;
using boost::regex_match;
using boost::smatch;
namespace regex_constants = boost::regex_constants;
}
Não vou discutir se isso é uma má ideia ou não. No entanto, argumentarei que ele o mantém limpo para o meu projeto e, ao mesmo tempo, o torna específico: É verdade que preciso usar o Boost, mas estou usando-o como o libstdc ++ eventualmente o terá. Sim, iniciar seu próprio projeto e começar com um padrão (...) desde o início ajuda muito na manutenção, desenvolvimento e tudo o que está envolvido no projeto!
Apenas para esclarecer uma coisa: na verdade, não acho que seja uma boa ideia usar o nome de uma classe / o que quer que seja no STL deliberadamente e mais especificamente no lugar de. A string é a exceção (ignore o primeiro, acima ou o segundo aqui, trocadilhos, se necessário) para mim, pois eu não gostei da ideia de 'String'.
Como é, ainda sou muito tendencioso em relação a C e tendencioso em relação a C ++. Detalhes poupadores, muito do que eu trabalho se encaixa mais em C (mas foi um bom exercício e uma boa maneira de me obrigar a. Aprender outro idioma eb. Tentar não ser menos tendencioso contra objetos / classes / etc, o que talvez seja melhor declarado menos mente fechada, menos arrogante e mais receptiva.). Mas o que é útil é o que alguns já sugeriram: eu realmente uso list (é bastante genérico, não é?) E ordeno (a mesma coisa) para nomear dois que causariam um conflito de nomes se eu o fizesse using namespace std;
, e assim para esse fim, prefiro ser específico, controlar e saber que, se pretender que seja o uso padrão, terei que especificá-lo. Simplificando: não é permitido assumir.
E quanto a fazer parte da regex do Boost std
. Faço isso para integração futura e - novamente, admito que isso é parcialidade - não acho que seja tão feio quanto boost::regex:: ...
. De fato, isso é outra coisa para mim. Ainda há muitas coisas em C ++ que ainda tenho que aceitar totalmente em aparência e métodos (outro exemplo: modelos variados versus argumentos var [embora eu admita que modelos variados sejam muito úteis!]). Mesmo aqueles que eu aceito foram difíceis, e ainda tenho problemas com eles.