Saya mengembangkan kode untuk mensimulasikan aliran fluida dengan zat biologis yang ada dalam aliran. Ini melibatkan persamaan standar Navier-Stokes yang digabungkan ke beberapa model biologis tambahan. Ada banyak parameter / konstanta.
Saya memiliki fungsi tertulis untuk menangani perhitungan utama, tetapi masalah yang saya miliki adalah banyaknya konstanta / parameter yang menjadi sandaran perhitungan ini. Tampaknya rumit untuk melewatkan 10-20 argumen ke suatu fungsi.
Salah satu alternatif adalah membuat semua konstanta variabel global, tapi saya tahu ini disukai di C ++.
Apa cara standar menangani banyak input ke suatu fungsi? Haruskah saya membuat struct dan meneruskannya?
Terima kasih
Jawaban:
Jika Anda memiliki konstanta yang tidak akan berubah sebelum berjalan, deklarasikan dalam file header:
Alasan mengapa Anda ingin melakukan ini adalah karena ia memungkinkan kompiler untuk menghitung nilai-nilai konstan sebelum waktu berjalan, yang bagus jika Anda memiliki banyak dari mereka.
Anda juga dapat menggunakan kelas sederhana untuk memberikan nilai:
sumber
constexpr
, setidaknya lampirkan ke dalamnamespace
sehingga mereka tidak menginjak simbol global lainnya. Menggunakan variabel global yang dipanggilG
hanya memanggil masalah.ifndef PROJECT_NAME_FILE_NAME_EXTENSION
. Juga, tidak yakin mengapa Anda menggunakan huruf besar konstanta, tetapi tidak termasuk makro penjaga Anda. Anda umumnya ingin memanfaatkan semua makro, terutama karena mereka tidak sanitasi. Untuk kapitalisasi konstanta tidak masuk akal secara umum .G
baik-baik saja karena SI-nya, tetapi mass_earth lebih tepat, dan harus memenuhi syarat dengan namespace untuk menandakan global yaituconstants::mass_earth
.Alternatif lain yang mungkin sejalan dengan alur pemikiran Anda adalah dengan menggunakan namespace (atau ruang nama bersarang) untuk mengelompokkan konstanta dengan benar. Contohnya mungkin:
Dengan menggunakan teknik di atas, Anda dapat melokalisasi konstanta referensi ke beberapa file dan ruang nama yang diinginkan, menjadikannya lebih terkontrol daripada variabel global sambil mendapatkan beberapa manfaat serupa. Ketika Anda menggunakan konstanta, itu sesederhana melakukan:
Jika Anda tidak menyukai rantai panjang ruang nama bersarang, Anda selalu dapat mempersingkat hal-hal bila perlu dengan menggunakan alias namespace:
sumber
Salah satu cara yang saya lakukan adalah menggunakan singleton.
Ketika Anda memulai program Anda, Anda memulai singleton Anda dan mengisinya dengan data konstan (mungkin dari file properti yang Anda miliki untuk dijalankan). Anda mendapatkan ini di setiap kelas yang Anda butuhkan nilainya dan hanya menggunakannya.
sumber