Devo colocar muitas funções em um arquivo? Ou, mais ou menos, uma função por arquivo?

Eu amo organizar meu código, então, idealmente, quero uma classe por arquivo ou, quando tiver funções que não sejam membros, uma função por arquiv

As razões são:

Quando eu ler o código, sempre saberei em qual arquivo devo encontrar uma determinada função ou class

Se for uma classe ou uma função de não membro por arquivo de cabeçalho, não incluirei uma bagunça inteira quando euinclude um arquivo de cabeçalho.

Se eu fizer uma pequena alteração em uma função, somente essa função precisará ser recompilad

No entanto, dividir tudo em muitos cabeçalhos e muitos arquivos de implementação pode diminuir consideravelmente a compilação. No meu projeto, a maioria das funções acessa um certo número de outras funções de biblioteca modeladas. Portanto, esse código será compilado repetidamente, uma vez para cada arquivo de implementação. Compilar todo o meu projeto atualmente leva 45 minutos ou mais em uma máquina. Existem cerca de 50 arquivos de objeto, e cada um usa os mesmos cabeçalhos caros para compila

alvez seja aceitável ter uma classe (ou função não membro) porcabeçalh, mas colocando as implementações de muitas ou todas essas funções no arquivo de implementação, como no exemplo a segui

// foo.h
void foo(int n);

// bar.h
void bar(double d);

// foobar.cpp
#include <vector>
void foo(int n) { std::vector<int> v; ... }
void bar(double d) { std::vector<int> w; ... }

Novamente, a vantagem seria que eu posso incluir apenas a função foo ou apenas a função bar, e a compilação de todo o projeto será mais rápida porquefoobar.cpp é, então ostd::vector<int> (que é apenas um exemplo aqui para outra construção de modelo caro para compilar) deve ser compilado apenas uma vez, em vez de duas vezes se eu compilasse umfoo.cpp ebar.cpp separadamente. Obviamente, meu motivo (3) acima não é válido para este cenário: Depois de alterar foo () {...}, preciso recompilar todo o arquivo potencialmente grandefoobar.cpp.

Estou curioso para saber quais são suas opiniões!

questionAnswers(9)

yourAnswerToTheQuestion