毫米助推::单位
Millimeters in boost::units
本文关键字:单位 更新时间:2023-10-16
我想对一些SI度量使用boost::单位。然而,我们的代码主要处理毫米,而不是使用
quantity<length> value = 1*milli*meter;
我们更喜欢
quantity<length> value = 1*millimeter;
然而,我不知道如何定义"毫米"(不使用#define)。
第二,使用前缀单位的开销是多少?
更新:这需要在没有C++11功能(即没有UDL)的情况下运行
C++11确实是最简单的解决方案。你可以做
static const auto millimeter = milli * meter;
或
auto operator"" _mm (long double val) -> decltype(val * milli * meter)
{
return val * milli * meter;
}
只要不转换为其他前缀,就不应该有性能损失。即使你这样做了,也应该被忽略。
如果您不想使用C++11,您需要找到表达式milli * meter
的相应类型,尽管您可以用int
替换auto
并读取编译器消息。
我使用以下方法:
// your namespace name for units
namespace outernamespace {
namespace millimeter_system {
typedef boost::units::scaled_base_unit<boost::units::si::meter_base_unit, boost::units::scale<10, boost::units::static_rational<-3>>> millimeter_base_unit;
typedef boost::units::make_system<millimeter_base_unit>::type system;
typedef boost::units::unit<boost::units::length_dimension, system> length;
BOOST_UNITS_STATIC_CONSTANT(millimeter, length);
BOOST_UNITS_STATIC_CONSTANT(millimeters, length);
}
typedef boost::units::quantity<millimeter_system::length> quantity_millimeter;
using millimeter_system::millimeter;
using millimeter_system::millimeters;
}
// demonstration of usage
void foo() {
using namespace outernamespace;
using namespace boost::units;
using namespace boost::units::si;
quantity_millimeter mm = 5 * millimeter;
quantity<boost::units::si::length> m = 0.004 * meter;
if (mm < static_cast<quantity_millimeter>(m)) {
std::cout << 'lt ' << std::endl;
}
else {
std::cout << 'geq ' << std::endl;
}
}
如果你有一个支持C++11的编译器,你可以使用用户定义的文字来定义你的单元。
double operator"" _millimeter ( double value )
{
return value;
}
你可以这样使用:
double foo = 1000_millimeter;
相关文章:
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- RcppEigen 模板化函数,用于填充单位法线
- 如何有效地计算将单位立方体映射到自身的反射和旋转?
- 以天C++为单位的两个时间戳之间的差异
- 如何以毫秒为单位获取开始时间和 now() 之间的毫秒差异(以 C++为单位?
- 从原始字节解码协议缓冲区(以 C++为单位)
- ANTLR - 如何从维度扩展单位
- 如何在 c++ 中确定一条指令(以字节为单位)在哪里结束,另一条指令从哪里开始?
- 编写以 C++ 为单位返回值的函数
- 纹理单位重叠?渲染了错误的纹理
- Cuda:具有位集数组的 XOR 单位集
- 以C++为单位进行运行长度编码
- 如何找到两个日期之间的时间差异(以秒和纳秒为单位)?
- arr[n] 是否以 C++ 为单位打印数组的长度?
- 字符串数组上的 sizeof 运算符以 C++ 为单位给出不同的输出
- 以 C++ 为单位具有输出限制的排列
- 以 GDB 为单位指定浮点精度
- 整数数据如何以位为单位存储在内存中?不是右对齐吗?
- 如何在没有硬编码的情况下以C++为单位获取类数组的长度?
- 为什么在函数中 'int main()' -> 's' 可以在此函数中使用单位化?