文書の過去の版を表示しています。
NestDAQ C++ techniques
- NestDAQ では開発者のコーディング量低減のため、Boost ライブラリといった便利な外部ライブラリ、さらに C++11 以上で採用された便利な機能が多く使われている。そのため、それなりに新しい C++ の書き方に慣れておく必要がある。個人的には、プログラミング初学者の可読性を考慮し、CERN ROOT v5 のインタープリター程度でつかえていた機能しか普段は使っていないので、なかなか覚えるのが大変。最近は new / delete を使わず、スマートポインタとかを使わないといけないらしい。(参考: servernote.net –【C++】new/deleteを撤廃しstd::shared_ptrを使う https://www.servernote.net/article.cgi?id=cpp-std-shared-ptr )
検証に使ったコード
型を調べる
- std::chrono ライブラリなどのライブラリを使っていると、型がよくわからなくなっていくる。ウェブで調べるのも良いが、コード中では、調べ方がいくつかあるようだ。Clang++ だと、typeid(parameter).name() として、結果を c++filt -t コマンドに渡すと、プラグラムで使われている型がどんな型かわかる。
std::chrono ライブラリ
- 時間、時刻関係の標準ライブラリ。C++11 から採用された模様。Boost からマージされたんだろうか?
- Apple の環境だと、std::chrono::duration の period がマイクロ秒であるが、Linux では、ナノ秒になっている。これにより、ナノ秒単位で計算するコードで、nano秒単位にキャストしているコードにおいて、Linux でコンパイルが通っても、macOS で通らないことがある。
- 参考: Stack Overflow – Apple clang: Why can I not create a time_point from std::chrono::nanoseconds https://stackoverflow.com/questions/65397041/apple-clang-why-can-i-not-create-a-time-point-from-stdchrononanoseconds
- 参考: Stack Overflow – platform-specific std::chrono::high_resolution_clock::period::num https://stackoverflow.com/questions/47687645/platform-specific-stdchronohigh-resolution-clockperiodnum
- 参考: Stack Overflow – Different behaviour of system_clock on windows and linux https://stackoverflow.com/questions/55120594/different-behaviour-of-system-clock-on-windows-and-linux