是否有理由不使用单元强制类型

Is there a reason not to use unit enforcing types?

本文关键字:类型 单元 有理由 是否      更新时间:2023-10-16

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

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

这有什么充分的理由吗?

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

所以我问:

有没有理由不使用单元强制类型?具体来说,有理由不使用boost::units吗?

我认为这种技术不更普遍的主要原因是拼写和阅读非常困难和繁琐。

希望这最终会成为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);

我使用这个库对编写正确的代码有很大的好处。 不幸的是,它的使用难度是应有的 10 倍。 不过,这仍然是值得的,因为跟踪尺寸和单位是一场噩梦。

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

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