混合单位与助推::单位
Mixed units with boost::units
在我的程序中,我想利用boost::单元进行类型安全计算和自动转换。作为该库的新手用户,我对它的工作原理以及为什么禁止隐式类型转换有了基本的了解。
现在我可以写这样的代码
using namespace boost::units;
using namespace boost::units::si;
quantity<mass> my_mass(50 * kilogram);
quantity<force> my_force = my_mass * 9.81 * meter / pow<2>(second);
其中my_mass
以千克表示,my_force
以牛顿表示。但为了方便起见,当与其他只接受double
的库交互时,我更喜欢力以千牛顿为单位(同样,压力以兆帕为单位)。所以我这样做:
typedef make_scaled_unit<force, scale<10, static_rational<3>>>::type kiloforce;
quantity<kiloforce> scaled_force(my_mass * 9.81 * meter / pow<2>(second));
这是有效的,但强制进行显式转换。以下代码没有编译:
quantity<kiloforce> scaled_force = my_mass * 9.81 * meter / pow<2>(second);
因为它表示一种隐式转换。那么,我的问题是:有没有一种方法可以配置库,使数量以所选的缩放单位表示?
毕竟,"千克"是这样的,所以我研究了缩放单位,但我似乎找不到让它发挥作用的方法。这个想法本来是定义一个自定义系统,但由于质量、力和压力是相互关联的,这是不可能的,正如这里所解释的。
基本问题似乎是,你正在寻找一个以千牛顿为单位的无量纲力。这并不难:
quantity<force> my_force = my_mass * 9.81 * meter / pow<2>(second);
double F = my_force / (kilo*newtons); // my_force in kN
物理问题似乎是"千力"。物理学不是这样运作的。力没有前缀,单位有。例如,长度与米/公里,质量与克/公斤。类似地,力与牛顿/千牛顿。
也就是说,我可以建议吗
make_scaled_unit<acceleration, scale<10, static_rational<3>>>::type g(0.00981);
不要问我为什么你会用每秒平方公里来表示地球的加速度,但千牛顿是每秒平方公里公斤。
相关文章:
- Cuda:具有位集数组的 XOR 单位集
- 所有可能的链接生成器与64位密钥
- OpenCV矩阵奇怪的加法,乘法与浮点数和8位值
- 整数数据如何以位为单位存储在内存中?不是右对齐吗?
- 24 位地址和 24 位算术与 24 位地址与 16 位地址算术之间的区别?
- 完美的广场与位明智和
- 位移位与前导 1.
- 与位字段的并集为位字段成员提供了意外值
- 是否与赢得64位有关?错误:STATUS_ACCESS_VIOLATION
- EDSDK 3.6 macOS - 32 位与 64 位和链接错误
- 将 64 位整数中的每个其他位与 32 位整数进行比较
- 单位测试与课程
- 下一个最大的整数,有一些中间位与模式匹配?
- C++32位与64位浮动限制
- 32 位与 64 位:巨大的运行时差异
- std::cout 可以设置坏位或故障位与操作员<<吗?如果是,什么时候?
- c++中的位与
- 如何对两个大整数进行位与运算
- g++32位与64位汇编中的动态与静态链接差异
- C++:32位与64位流操作