问题标签 [boost-units]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Boost.Units 频率到周期
我正在尝试使用 Boost.Units 库将频率(例如,20kHz)转换为其周期的持续时间(50000 纳秒)。我不想使用浮点数。
我遇到的麻烦是,简单地取倒数 1/f 会导致零截断,所以即使转换为纳秒后,结果也是 0ns。如果我先转换为兆赫然后取倒数,那么第一步再次导致零截断。
我发现的一种解决方法是使用 boost::rational 作为数量的 value_type。这行得通,但它让我觉得丑陋。有没有更好的解决方案?我对 Units 库还很陌生,到目前为止有点不知所措。
我现在的解决方案:
c++ - Boost::units::quantity“不完整类型”错误
我正在尝试在项目中使用 boost::units 但遇到了麻烦。
我有一个模板类,其中有一些quantity
对象作为成员。在一个中,我希望存储一个具有压力维度的值,因此我已将其quantity<pressure> press;
声明为成员变量。
然而,这给出了一个错误,说quantity
需要两个模板参数(源代码显示第二个模板参数应该默认为double
)。如果我然后指定quantity<pressure,double> press;
我会得到一个错误,上面写着
- 错误:字段“press”的类型不完整。
我做错了什么还是以某种方式实施压力有问题?
最小的例子:
细节:
- 提升 1.54.0
- g++ 4.7.3
c++ - 使用 Boost::units 在两个数量之间进行转换的最简单方法?
如果我只想将一个值从一个单位转换为另一个单位,那么最简单(理想情况下是单行)的方法是什么?
例如,我想以米为单位存储一个值,但以英里为单位指定它。
执行此操作的大多数示例似乎很长,涉及 typedef 和单元定义,并且没有给出简单的无单元输出。
c++ - 如何使用可能不同的 boost::dimension 存储 boost::quantity
我正在使用boost::units
库来强制科学项目中的物理一致性。我已经阅读并尝试了 boost 文档中的几个示例。我能够创建我的尺寸、单位和数量。我做了一些微积分,效果很好。这正是我所期望的,除了...
在我的项目中,我处理基于六个维度的具有多个不同单位(温度、浓度、密度等)的时间序列。为了允许安全和简单的单位转换,我想为每个通道类添加一个成员,表示时间序列的维度和单位。而且,数据处理(导入、转换等)是用户驱动的,因此是动态的。
我的问题如下,由于boost::units
结构的原因,同质系统中的数量但具有不同的维度有不同的类型。因此,您不能直接声明成员,例如:
编译器将声称您必须使用模板 V 形指定尺寸。但如果这样做,您将无法存储不同类型的数量(例如具有不同维度的数量)。
然后,我查找boost::units::quantity
声明以了解是否有可以以多态方式使用的基类。但是我没有找到它,相反我发现它boost::units
大量使用了模板元编程,这不是问题,但并不完全符合我的动态需求,因为一切都是在编译时而不是在运行时解决的。
经过更多阅读,我尝试将不同的数量包装在一个boost::variant
对象中(很高兴第一次见到它)。
我进行了一些测试,它似乎工作。但我对boost::variant
和visitor-pattern没有信心。
我的问题如下:
- 是否有另一种 - 也许是最好的 - 方法来进行运行时类型解析?
- 是
dynamic_cast
其中之一吗?单位转换不会经常发生,只有很少的数据需要关注。 - 如果
boost::variant
是一个合适的解决方案,它的缺点是什么?
c++ - 混合缩放和派生单位 un boost::units
我想boost::units
在项目中使用a来使用尺寸分析和单位系统之间的自动转换。我想用标准工程单位表示代码中的数量,这些单位通常是其他单位的缩放版本。让我用一个例子来解释这一点。假设我定义了以下系统
然后长度单位将定义为英尺,力 inlb*ft*s^-2
和压力 in lb*ft^-1*s^-2
。但是,我想使用磅力单位的力和 PSI 中的压力,即每平方英寸的磅力。我以为我可以使用缩放单位来表达这些并可以互换使用它们,但事实似乎并非如此。
我试过这个:
哪个编译没有问题。但是当我尝试像这样使用缩放单位时:
编译失败,出现“没有可行的转换错误”。我认为缩放单位的目的是自动进行这些转换。而且文档也让我认为我只需要定义 name_string 和 symbol_string 就可以打印磅力数量,但是这个
导致“boost::units::scale_list_dim 中没有名为符号的成员”错误。显然重载这些函数不适用于缩放单位。
也许我应该定义另一个这样的系统
但是,如果我想用 ft 表示长度和用 psi 表示压力,我无论如何都需要转换。
如果有人有更好的解决方案,我会很高兴。
c++ - 如何将 boost::units::metric::hour_base_unit 转换为 boost::units::si::time?
我想让以下代码正确编译:
使用 gcc,我收到以下错误:
我错过了什么?
floating-point - 在 Boost.Units 中基于自定义单位的数量之间强制执行基于理性的转换
我定义了一个自定义单位系统,它源自 boost::units::si::time。子单位使用 boost::units::make_scaled_unit 定义,因此转换因子使用 boost::units::scale 和 boost::units::static_rational 指定,例如 boost::units::scale<1020, boost::单位::static_rational<1> >。
一般来说,如果不是因为 boost::units::scale::value_type 是“double”,我不会抱怨。因此,数量之间的所有运行时转换都涉及浮点运算,而我的自定义单位之间的比率都是整数,例如 1 个苹果等于 18 个橙子,使用基于有理的因子进行转换就足够了。
有没有办法用其他东西覆盖用于单位转换的浮点算术?谢谢。
编辑:1.我的数量是使用整数类型定义的。
c++ - 提升异构单位 - 每分钟酒吧
我需要创建一个代表每次压力的单位,特别是每分钟的 Bar。我尝试以与之前创建类似单位相同的方式创建它:
然后我尝试使用它:
但是这条线并没有编译很长的错误线索,我在完全理解时遇到了一些麻烦。
根据 Boost 文档,同质系统只能由线性独立的基本单元组成。就我而言,我试图将条形图(它反过来“包含”秒作为时间元素)与分钟混合。这对我来说听起来有问题。但另一方面,由于我的系统中没有包含质量和长度基本单位,在我看来,基本单位毕竟是独立的。
无论如何,我在网上搜索了创建这种异构单元的示例,但没有找到任何可以理解的内容。此外,我在 Boost 文档中读到,异构单元不会保留有关其创建方式的信息。这是否意味着我无法将 BarPerMinuteRoC 乘以 Minute 并返回 Bar?
c++ - Why would a template class have an unused type?
I'm reviewing the boost units library and I am puzzled why the boost::units::unit class has an extra template parameter. Here is the example:
http://www.boost.org/doc/libs/1_57_0/boost/units/unit.hpp
The class is used to add dimensions to dimension system.
What purpose would "Enable" serve in this case?
c++ - 如何将 Boost 单元作为方法参数传递
我正在尝试在我的项目中使用 Boost.Units。我主要让它工作,但我想要一个访问器方法,它允许我使用不同的缩放值来获取原始值。例如,我想一次获得以伏特为单位的值,但在另一点我需要以毫伏为单位的值。我可以使用 conversion_factor 方法转换数字。但是,我想让使用传入默认比例的访问器更方便。这是我尝试使用的类的访问器方法:
我正在尝试像这样使用它:
但是,这不会编译。我收到以下错误:
我显然做错了什么,但是报告的错误很难用其中的所有模板代码解析,我不确定我做错了什么。我希望有人可能做过类似的事情并且能够告诉我我在哪里误入歧途?