6

从概念上讲,在我看来,使用基于单位强制的类型(米、秒、千克)会带来巨大的好处(额外检查传递的参数,摆脱 vars 中的单位名称等),但我还没有遇到那么多代码确实如此。我看到的代码确实使用了自定义类型。

我看到 boost 有一个单位库(boost::units 很简单),但是,我没有看到太多证据表明它被广泛使用(在基本的谷歌搜索中)

这有充分的理由吗?

这些似乎意味着一定有某种原因这种做法没有像我预期的那样被广泛采用。出于某种原因,也许比他们值得的麻烦更多?

所以我问:

是否有理由不使用单元强制类型?特别是有理由不使用 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 倍。尽管跟踪尺寸和单位是一场噩梦,但这仍然是值得的。

boost 单元库非常聪明、强大和完整。问题是,文档几乎不可读。名称混淆有很多问题,没有类型要求。作者提供了许多有用的示例 - 但不能替代构建更好的文档。

仅供参考 - 我在 CPPcon 2015 上介绍了一个关于这个主题的教程。你可以在https://www.youtube.com/watch?v=qphj8ZuZlPA找到它

于 2015-09-19T22:36:44.800 回答