Me deparei com este artigo propondo um estilo de codificação em c ++ que parece um pouco estranho no começo. Mas depois de ler e refletir um pouco, estou realmente pensando em tentar.
O benefício mais atraente é a facilidade dos métodos de refatoração. Eu me pego constantemente alterando nomes de métodos, parâmetros e assim por diante enquanto escrevia uma nova classe e em c ++ é muito irritante ter que alterar o nome de um método em dois arquivos (.h, .cpp).
Tentei encontrar algo errado com esse estilo, mas, além do fato de o código parecer e parecer realmente estranho para programadores experientes em c ++, não consigo identificar nenhuma falha importante. Mas, como sou um programador c ++ inexperiente, espero que alguém aqui possa me alertar sobre possíveis perigos.
Então, minha pergunta é:
Existem sérias desvantagens de usar esse estilo de codificação?
fonte
struct B
no exemplo para um modelo e ele compilou muito bem.Respostas:
Sim, você vai confundir outros programadores de C ++ se escrever todo o seu código assim. Eu nunca vi código C ++ fora do modelo escrito dessa maneira, com tudo no arquivo de cabeçalho. Isso foi discutido em profundidade em uma questão de Stack Overflow .
Quanto a problemas técnicos reais , algumas coisas vêm à mente.
inline
. Seus tempos de compilação provavelmente aumentarão.Você também pode querer verificar a linguagem de programação D , que eu ouço resolve muitos desses problemas. O compilador D foi projetado com esse estilo em mente e não tem 30 anos de compatibilidade com versões anteriores em C para dar suporte.
fonte
Não é exatamente uma ideia nova. Programadores iniciantes evitam declarações como a praga e geralmente se safam porque seus programas são muito pequenos. A conseqüência é que agora você precisa se preocupar com a ordem em que define suas funções. A consequência de se preocupar com a ordem de definição é uma tentação de minimizar o problema, tornando suas funções muito grandes.
Você também perde a boa separação entre interface e implementação. O próprio autor lamenta que os membros particulares façam parte do arquivo de cabeçalho e, em seguida, "resolva" o problema, tornando todos os detalhes da implementação parte do arquivo de cabeçalho.
fonte
Se você deseja classes no estilo Java, programe em Java !
Ele faz muitas conjecturas em seu artigo que são totalmente erradas. Em nenhuma ordem particular:
Isso está errado e mostra que ele nunca trabalhou em um programa C ++ em larga escala. Faça o download de qualquer grande programa C ++ de código aberto, compile o programa e diga-me se você deseja esperar tanto tempo toda vez que esquecer um ponto e vírgula.
Ok, primeiro, não é um recurso que "muito poucos programadores parecem conhecer". Segundo, este é um completo mal-entendido da declaração direta e para que ela é usada. O guia de estilo de codificação do Google tem uma introdução decente: http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Forward_Declarations
Eles destinam-se a simplificar o compilador e reduzem substancialmente o tempo de compilação.
fonte
Parece-me que estou apenas dando um nome pateta para fazer declarações avançadas em vez de
#include <blah>
.Os benefícios para as declarações avançadas são que seus tempos de compilação podem ser significativamente mais rápidos, mas a principal desvantagem da IMO é que você deve estar ciente de quando pode e não pode se safar com uma declaração direta e, quando você estraga tudo, pode obter mensagens de erro aparentemente incompreensíveis para um erro trivial.
fonte