Estoy desarrollando un código para simular el flujo de fluidos con sustancias biológicas presentes en el flujo. Esto implica las ecuaciones estándar de Navier-Stokes acopladas a algunos modelos biológicos adicionales. Hay muchos parámetros / constantes.
He escrito funciones para manejar los cálculos principales, pero un problema que tengo es la gran cantidad de constantes / parámetros de los que dependen estos cálculos. Parece engorroso pasar 10-20 argumentos a una función.
Una alternativa es hacer que todas las constantes sean variables globales, pero sé que esto está mal visto en C ++.
¿Cuál es la forma estándar de manejar muchas entradas a una función? ¿Debo hacer una estructura y pasar eso en su lugar?
Gracias
Respuestas:
Si tiene constantes que no cambiarán antes de las ejecuciones, declarelas en un archivo de encabezado:
La razón por la que desearía hacer esto es que permite que el compilador calcule valores constantes antes del tiempo de ejecución, lo cual es bueno si tiene muchos de ellos.
También puede usar una clase simple para pasar valores:
fuente
constexpr
, al menos enciérrelas en unanamespace
para que no pisen ningún otro símbolo global. Usar una variable global llamadaG
es solo pedir problemas.ifndef PROJECT_NAME_FILE_NAME_EXTENSION
. Además, no estoy seguro de por qué capitalizó las constantes, pero no sus macros de protección de inclusión. En general, desea capitalizar todas las macros, especialmente porque no son sanitarias. Para las constantes, la capitalización no tiene sentido en general .G
está bien porque es SI, pero mass_earth es más apropiado y debe estar calificado con un espacio de nombres para significar global, es decirconstants::mass_earth
.Otra alternativa que puede estar en línea con su línea de pensamiento es usar un espacio de nombres (o espacios de nombres anidados) para agrupar adecuadamente las constantes. Un ejemplo podría ser:
Usando la técnica anterior, puede localizar constantes de referencia en algunos archivos y espacios de nombres deseados, haciéndolos más controlados que las variables globales mientras obtiene algunos de los beneficios similares. Cuando usa las constantes, es tan simple como hacer:
Si no le gustan las largas cadenas de espacios de nombres anidados, siempre puede acortar las cosas cuando sea necesario utilizando un alias de espacio de nombres:
fuente
Una forma en que lo hago es usar singleton.
Cuando inicia su programa, inicia su singleton y lo llena con los datos constantes (probablemente de un archivo de propiedades que tiene para la ejecución). Obtiene esto en cada clase que necesita los valores y simplemente lo usa.
fuente