是否有理由不使用单元强制类型
Is there a reason not to use unit enforcing types?
从概念上讲,在我看来,使用基于单位强制执行的类型(米、秒、千克)将带来巨大的好处(在传递参数时进行额外检查,在变量中摆脱单位名称等),但我还没有遇到那么多代码。我看到的代码确实使用了自定义类型。
我看到 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 找到它
相关文章:
- ArduinoJson 6.15.2:JsonObject没有命名类型
- 什么时候调用组成单元对象的析构函数
- 防止主数据类型C++的隐式转换
- 大量序列中核苷酸类型的快速计数
- 如何从C++中的依赖类型中获得它所依赖的类型
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 是否可以初始化不可复制类型的成员变量(或基类)
- 类型擦除代码的依赖注入单元测试
- 使用增压单元:是否可以为复合材料类型制定无量纲的铸造
- GCC 6.3.0 中的 ODR 冲突,类型在两个单独的翻译单元中定义
- 是否有任何数据类型或方法可以计算当前单元格中先前数组单元格的总和
- C 单元测试框架具有类型和值参数化
- Stack.h:13:3:错误:“单元格”未命名类型
- 管理多维阵列的课程!我该如何管理单元格中的不同数据类型
- 尝试使用 uint*& 作为常量单元*&失败:从类型"uint8_t"的表达式初始化类型"const uint8_t*&"的引用无效
- 是否有理由不使用单元强制类型
- 将MATLAB单元类型转换为c++
- 在shader中,在同一纹理单元中同时使用不同的纹理类型
- 如何将在一个类中声明的类的数据类型访问到另一个类(两者都在不同的翻译单元中)
- 为什么相同类型的数据单元有不同的名称?