Opracowuję kod do symulacji przepływu płynu z obecnymi w nim substancjami biologicznymi. Dotyczy to standardowych równań Naviera-Stokesa połączonych z niektórymi dodatkowymi modelami biologicznymi. Istnieje wiele parametrów / stałych.
Napisałem funkcje do obsługi głównych obliczeń, ale mam problem z dużą liczbą stałych / parametrów, od których zależą te obliczenia. Przekazanie funkcji 10-20 argumentów wydaje się kłopotliwe.
Jedną z możliwości jest uczynienie wszystkich stałych zmiennymi globalnymi, ale wiem, że w C ++ jest to niezadowolone.
Jaki jest standardowy sposób obsługi wielu danych wejściowych do funkcji? Czy zamiast tego powinienem utworzyć strukturę i przekazać ją?
Dziękuję Ci
Odpowiedzi:
Jeśli masz stałe, które nie zmienią się przed uruchomieniem, zadeklaruj je w pliku nagłówkowym:
Powodem, dla którego chcesz to zrobić, jest to, że pozwala on kompilatorowi na obliczenie stałych wartości z wyprzedzeniem przed czasem wykonywania, co jest dobre, jeśli masz ich dużo.
Możesz także użyć prostej klasy do przekazywania wartości:
źródło
constexpr
, przynajmniej otoczmy jenamespace
tak, aby nie opierały się na innych symbolach globalnych. Używanie zmiennej globalnej o nazwieG
jest po prostu wzywaniem do kłopotów.ifndef PROJECT_NAME_FILE_NAME_EXTENSION
. Nie wiesz też, dlaczego wstawiłeś wielkie litery, ale nie włączaj makr wartowników. Zasadniczo chcesz wykorzystać wszystkie makra, zwłaszcza że nie są one sanitarne. W przypadku stałych wielkie litery nie mają w ogóle sensu .G
jest w porządku, ponieważ jego SI, ale mass_earth jest bardziej odpowiednie i powinien być zakwalifikowany z przestrzenią nazw oznaczającą globalną, tjconstants::mass_earth
.Inną alternatywą, która może być zgodna z twoim tokiem myślenia, jest użycie przestrzeni nazw (lub zagnieżdżonych przestrzeni nazw) do prawidłowego grupowania stałych. Przykładem może być:
Korzystając z powyższej techniki, możesz zlokalizować stałe odniesienia do niektórych pożądanych plików i przestrzeni nazw, dzięki czemu są one bardziej kontrolowane niż zmienne globalne, a jednocześnie uzyskujesz podobne korzyści. Kiedy używasz stałych, jest to tak proste, jak:
Jeśli nie lubisz długich łańcuchów zagnieżdżonych przestrzeni nazw, zawsze możesz skrócić rzeczy, gdy to konieczne, używając aliasu przestrzeni nazw:
źródło
Jednym ze sposobów jest użycie singletona.
Po uruchomieniu programu inicjujesz singletona i wypełniasz go stałymi danymi (prawdopodobnie z pliku właściwości, który masz do uruchomienia). Dostajesz to w każdej klasie, której potrzebujesz wartości i po prostu z niej korzystaj.
źródło