6

概念的には、単位強制ベースのタイプ(メートル、秒、キログラム)を使用すると、大きな利点(引数を渡す際の余分なチェック、変数内の単位名の削除など)が得られるように思えますが、それほど多くのコードに遭遇していません。それはします。私が見たコードでは、カスタム型が使用されています。

ブーストにはユニット ライブラリ(boost::units だけで十分)があることがわかりますが、(基本的な Google 検索で)広く使用されているという証拠はあまり見られません。

これには正当な理由がありますか?

これらを総合すると、私が期待するほどこの慣行が広く採用されていない何らかの理由があるに違いないことを暗示しているように思われます。なんらかの理由で、価値がある以上のトラブルが発生する可能性がありますか?

そして、私は尋ねます:

ユニット強制型を使用しない理由はありますか? 具体的には、boost::units を使用しない理由はありますか?

4

2 に答える 2

6

この手法があまり普及していない主な理由は、綴ったり読んだりするのが恐ろしく難しく、面倒だからだと思います。

これが最終的に C++11 でより受け入れられるプログラミング スタイルになることを願っています。これにより、ユーザー定義のリテラルが言語に追加され、次のように記述できるようになります。

auto acc = 10_m / 1_s / 1_s;

伝統的なものではなく

myframework::units::si<acceleration>::type acc = myframework::unit_cast<units::meters>(10.0)
   / myframework::unit_cast<units::seconds>(1)
   / myframework::unit_cast<units::seconds>(1);
于 2012-09-25T16:28:27.887 に答える
3

私はこのライブラリを使用して、正しいコードを書くことに大きな利益をもたらしました。残念ながら、それは本来の 10 倍ほど使いにくいものです。寸法と単位を追跡するのは悪夢なので、それでも価値があります。

ブースト ユニット ライブラリは非常に賢く、強力で完全です。問題は、ドキュメントがほとんど読めないことです。紛らわしい名前には多くの問題があり、型の要件はありません。著者は参考になる多くの例を含めましたが、より適切に構成されたドキュメントの代わりにはなりません。

参考までに - 私は CPPcon 2015 でこの主題に関するチュートリアルを発表しました。https://www.youtube.com/watch?v=qphj8ZuZlPAで見つけることができます

于 2015-09-19T22:36:44.800 に答える