Estou desenvolvendo um código para simular o fluxo de fluidos com substâncias biológicas presentes no fluxo. Isso envolve as equações padrão de Navier-Stokes acopladas a alguns modelos biológicos adicionais. Existem muitos parâmetros / constantes.
Eu escrevi funções para lidar com os principais cálculos, mas um problema que estou tendo é o grande número de constantes / parâmetros dos quais esses cálculos dependem. Parece complicado passar de 10 a 20 argumentos para uma função.
Uma alternativa é tornar todas as constantes variáveis globais, mas sei que isso é desaprovado em C ++.
Qual é a maneira padrão de lidar com muitas entradas para uma função? Devo fazer uma estrutura e passar isso em vez disso?
Obrigado
Respostas:
Se você tiver constantes que não serão alteradas antes das execuções, declare-as em um arquivo de cabeçalho:
A razão pela qual você deseja fazer isso é que ele permite que o compilador calcule valores constantes antes do tempo de execução, o que é bom se você tiver muitos deles.
Você também pode usar uma classe simples para passar valores:
fonte
constexpr
, ao menos coloque-as em umnamespace
para que elas não pisem em nenhum outro símbolo global. Usar uma variável global chamadaG
é apenas um problema.ifndef PROJECT_NAME_FILE_NAME_EXTENSION
. Além disso, não sei por que você colocou constantes em maiúsculas, mas não as macros de guarda de inclusão. Você geralmente deseja capitalizar todas as macros, especialmente porque elas não são sanitárias. Para constantes, a capitalização não faz sentido em geral .G
é bom porque seu SI, mas mass_earth é mais apropriado e deve ser qualificado com um espaço para nome para significar ie globalconstants::mass_earth
.Outra alternativa que pode estar alinhada com sua linha de pensamento é usar um espaço para nome (ou espaços para nome aninhados) para agrupar corretamente as constantes. Um exemplo pode ser:
Usando a técnica acima, você pode localizar constantes de referência em alguns arquivos e espaços de nomes desejados, tornando-os mais controlados que as variáveis globais e obtendo alguns dos benefícios semelhantes. Quando você usa as constantes, é tão simples quanto fazer:
Se você não gosta de longas cadeias de namespaces aninhados, sempre pode encurtar as coisas quando necessário, usando um alias de namespace:
fonte
Uma maneira que eu faço é usar o singleton.
Ao iniciar seu programa, você inicia seu singleton e o preenche com os dados constantes (provavelmente de um arquivo de propriedades que você possui para a execução). Você obtém isso em todas as classes que precisa dos valores e apenas o usa.
fonte