Я разрабатываю код для моделирования потока жидкости с биологическими веществами, присутствующими в потоке. Это включает в себя стандартные уравнения Навье-Стокса, связанные с некоторыми дополнительными биологическими моделями. Есть много параметров / констант.
Я написал функции для обработки основных вычислений, но проблема, с которой я сталкиваюсь, заключается в большом количестве констант / параметров, от которых зависят эти вычисления. Кажется неудобным передавать 10-20 аргументов в функцию.
Одна альтернатива - сделать все константы глобальными переменными, но я знаю, что это не одобряется в C ++.
Каков стандартный способ обработки множества входных данных для функции? Должен ли я сделать структуру и передать вместо этого?
Спасибо
Ответы:
Если у вас есть константы, которые не изменятся перед запуском, объявите их в заголовочном файле:
Причина, по которой вы хотели бы сделать это, состоит в том, что он позволяет компилятору вычислять постоянные значения перед выполнением, что хорошо, если у вас их много.
Вы также можете использовать простой класс для передачи значений:
источник
constexpr
, по крайней мере, заключите их вnamespace
так, чтобы они не наступали ни на какие другие глобальные символы. Использование глобальной переменной называетсяG
просто вызовом проблем.ifndef PROJECT_NAME_FILE_NAME_EXTENSION
. Кроме того, вы не знаете, почему вы использовали заглавные буквы в константах, но не в макросах include guard. Как правило, вы хотите использовать все макросы с большой буквы, особенно потому, что они не являются санитарными. Для постоянных капитализация не имеет смысла вообще .G
это хорошо , потому что его SI, но mass_earth является более подходящим, и должны быть квалифицированы с пространством имен для обозначения глобального ИЭconstants::mass_earth
.Другая альтернатива, которая может соответствовать вашему ходу мыслей, - это использовать пространство имен (или вложенные пространства имен) для правильной группировки констант. Примером может быть:
Используя описанную выше технику, вы можете локализовать ссылочные константы для некоторых желаемых файлов и пространств имен, делая их более управляемыми, чем глобальные переменные, в то же время получая некоторые из аналогичных преимуществ. Когда вы используете константы, это так же просто, как сделать:
Если вам не нравятся длинные цепочки вложенных пространств имен, вы всегда можете сократить время, когда это необходимо, используя псевдоним пространства имен:
источник
Один из способов, который я делаю, - это использование синглтона.
Когда вы запускаете вашу программу, вы запускаете свой синглтон и заполняете его постоянными данными (вероятно, из файла свойств, который вы имеете для запуска). Вы получаете это в каждом классе, в котором вам нужны значения, и просто используете его.
источник