Je développe un code pour simuler l'écoulement des fluides avec des substances biologiques présentes dans l'écoulement. Cela implique les équations de Navier-Stokes standard couplées à certains modèles biologiques supplémentaires. Il existe de nombreux paramètres / constantes.
J'ai écrit des fonctions pour gérer les principaux calculs, mais un problème que j'ai est le grand nombre de constantes / paramètres dont dépendent ces calculs. Il semble lourd de transmettre 10 à 20 arguments à une fonction.
Une alternative est de rendre toutes les constantes variables globales, mais je sais que cela est mal vu en C ++.
Quelle est la manière standard de gérer de nombreuses entrées d'une fonction? Dois-je faire une structure et la passer à la place?
Je vous remercie
Réponses:
Si vous avez des constantes qui ne changeront pas avant les exécutions, déclarez-les dans un fichier d'en-tête:
La raison pour laquelle vous voudriez faire cela est qu'elle permet au compilateur de calculer les valeurs constantes avant l'exécution, ce qui est bien si vous en avez beaucoup.
Vous pouvez également utiliser une classe simple pour transmettre des valeurs:
la source
constexpr
, au moins les enfermer dans unnamespace
afin qu'elles ne marchent pas sur d'autres symboles globaux. L'utilisation d'une variable globale appeléeG
est juste un problème.ifndef PROJECT_NAME_FILE_NAME_EXTENSION
. De plus, vous ne savez pas pourquoi vous avez capitalisé les constantes, mais pas vos macros de garde d'inclusion. Vous souhaitez généralement capitaliser toutes les macros, notamment parce qu'elles ne sont pas sanitaires. Pour les constantes, la capitalisation n'a pas de sens en général .G
est bien parce que son SI, mais mass_earth est plus approprié, et devrait être qualifié avec un espace de noms pour signifier global ieconstants::mass_earth
.Une autre alternative qui peut être en ligne avec votre réflexion est d'utiliser un espace de noms (ou des espaces de noms imbriqués) pour regrouper correctement les constantes. Un exemple pourrait être:
En utilisant la technique ci-dessus, vous pouvez localiser les constantes de référence dans certains fichiers et espaces de noms souhaités, ce qui les rend plus contrôlés que les variables globales tout en bénéficiant de certains avantages similaires. Lorsque vous utilisez les constantes, c'est aussi simple que de faire:
Si vous n'aimez pas les longues chaînes d'espaces de noms imbriqués, vous pouvez toujours raccourcir les choses si nécessaire en utilisant un alias d'espace de noms:
la source
Une façon que je fais est d'utiliser singleton.
Lorsque vous démarrez votre programme, vous lancez votre singleton et le remplissez avec les données constantes (probablement à partir d'un fichier de propriétés que vous avez pour l'exécution). Vous obtenez cela dans chaque classe dont vous avez besoin des valeurs et utilisez-le simplement.
la source