问题标签 [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.

0 投票
2 回答
4135 浏览

c++ - 将 boost.units 中的单位从 angular_velocity 转换为 degree_per_second

我需要从一般的 angular_velocity 转换为度/秒。

为了说明这个问题,示例 boostUnits.cpp:

生成此编译器输出:

实现所需类型规范和后续转换的语法是什么?我是否需要指定degrees_per_second 单位,如果需要,如何指定?

文档: http: //www.boost.org/doc/libs/1_37_0/doc/html/boost_units.html

预先感谢您的帮助。

0 投票
1 回答
1851 浏览

c++ - 如何使用 boost::units 添加您自己的基本单位和转换

我目前使用 boost::units 来表示以 si 为单位的扭矩,但是我得到了以磅英尺为单位的扭矩。因此,我试图创建一个 pound_foot 单位的扭矩和一个转换来支持这一点。我懒惰的尝试是简单地定义:

然后做:

但这感觉并不令人满意。我的第二次尝试是尝试定义一个名为 pound_foot 的新基本单位(见下文)。但是当我尝试以与上述类似的方式使用它时(对 si 单元进行强制转换),我得到一个充满错误的页面。关于正确方法的任何建议?

0 投票
4 回答
1362 浏览

c++ - 将线性代数库与 Boost::Units 相结合

我正在做大量的科学编程,并在 Boost.Units 方面取得了非常好的经验,它为数量提供了编译时维度分析(即用单位标记数量,从而通过经典物理维度分析捕获许多错误)和使用 Eigen 2 用于线性代数。

但是,Eigen 没有单位的概念,虽然您可以在矩阵中为 Eigen 设置标量,但它期望两个量的乘积产生相同的类型,这对于单位来说显然是不正确的。例如,像这样的代码:

不起作用,即使它在逻辑上是正确的。

有没有支持单位的矩阵库?我知道这在过去是出了名的难以实现,而 C++11decltype将使这变得更容易,但使用 C++03 和模板专业化肯定是可能的。

0 投票
1 回答
293 浏览

c++ - 无法使用 Boost Units 确定编译器错误的解决方案

助推器版本:1.45

编译器:Visual Studio 2008

平台:Windows 7

错误:编译以下代码时出现错误 C2440 "initializing" : cannot convert from 'boost::units::quantity' to 'boost::units::quantity' with

[ Unit=boost::units::unit>,boost::units::detail::static_power_impl<0>::apply>::type,boost::units::hogogeneous_system>>>>, Y = double ]

[ Unit=myproject::types::myproject_length ]

类“boost::units::quantity”的构造函数被声明为“显式”

[ Unit=myproject::types::myproject_length ]

我不确定这里有什么问题。如果我从以下代码中删除“radii_t result =”并注释掉 IO 语句,我会得到与上面引用的相同的错误。下面是我使用的代码。感谢您在我学习 Boost Units 时的耐心等待。

Q1:这个错误的原因是什么?错误输出中的内容可以帮助您弄清楚这一点。

Q2:即使上面的错误不存在你提到它会导致维度分析失败。我想我们都同意类型是半径^-1。你如何声明一个类型被提升到正确的权力?

斯蒂芬

0 投票
1 回答
285 浏览

c++ - 如何为 boost::units::si::angular_acceleration 赋值?

在 boost 单元中,我通常通过乘以一个静态常量来赋值:

例如

但是,当没有定义乘数 const 时,我该怎么做呢?

例如,这不会编译,因为 boost::units::si::radians_per_second_per_second 没有定义。

0 投票
2 回答
2287 浏览

c++ - Physical Boost.Units 用户定义文字

现在我们很快就有了用户定义的文字(UDL),例如在 GCC 4.7 中,我急切地等待(物理)单元库(例如Boost.Units )使用它们来简化文字的表达,例如1+3i,或. 有没有人使用支持这种行为的 UDL为Boost.Units编写了扩展?3m3meter13_meter

0 投票
2 回答
553 浏览

c++ - Boost Units 使用问题 - hash_value, count 乘法

我正在尝试自学 Boost Unit,但在使用单位作为浮动替代品时遇到了一些问题。

  1. 我正在使用自定义的道尔顿/amu 单位进行计算。我的旧代码就像

    但是,对单位做同样的事情(dalton_t 是数量的 typedef)

    提供错误“二进制表达式的无效操作数”。这是否意味着 12 应该是某种无量纲单位?

  2. 我还使用质量作为无序集中的键。

    这会提供一个错误“No matching function for call to hash_value”,即使它是在单元的头文件中定义的。

对其中任何一个有什么想法吗?

单位头文件如下:

先感谢您!

亚当

0 投票
1 回答
1099 浏览

c++ - 创建用户定义的转换

我正在尝试为米和公里创建单位。然后我想总结并相应地转换它们。我知道 boost::units 库已经有 SI 系统,但我想从头开始创建所有内容,因为我需要为我的项目创建自己的系统(所以我这样做是为了学习)。我的目的是声明一个可以使用单位修改的“长度”变量:例如我想写

为此,我创建了length.h文件,其中包含米和公里的定义,最后我声明了这两个单位之间的转换:

然后我创建文件units.h,在其中定义我自己的单位系统

至少,我在我的主要功能中使用了这个标题

这个项目编译,但它没有做我想要的。当我打印变量 xLength2 时,我得到1500 m而不是1500 km1500000 m。总和也是错误的,因为我知道 1800 m。就像我将公里视为米并且转换不起作用。

我做错了什么?

0 投票
2 回答
540 浏览

c++ - 是否有理由不使用单元强制类型?

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

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

这有充分的理由吗?

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

所以我问:

是否有理由不使用单元强制类型?特别是有理由不使用 boost::units 吗?

0 投票
1 回答
796 浏览

c++ - 将标量乘以 boost.units.quantity(自动类型转换问题?)

这是一个非常简约的例子。我以下列方式使用Boost.Units :

然后有时我需要有类似的东西

0.5这可以正常工作,因为编译器将double. 但是,当REAL有什么不同时,我会得到一个编译错误,例如,如果我将定义更改为REAL编译long double抱怨:

查看Boost.Units 文档,我发现它的operator*重载如下:

尽管从定义中可以清楚地看出数量的标量和内部类型必须相同,但我希望编译器在可以隐式进行转换时自动转换类型(例如 from doubleto long double)。但是我认为我可能会遗漏一些东西,因为自动类型转换当然适用于其他简单的函数,比如long double f(long double const & ld).

我的问题是我已经使用v_halved = 0.5 * v了很多类似的表达式,我的项目已经变得相当大,而且直到现在,在必须定义之后REALlong double才意识到这是一个问题。所以,我想知道一个解决方法/解决方案,我知道这static_cast<REAL>(0.5)将是一个解决方案,但我仍然觉得我错过了一些关于编译器无法自动将标量转换为正确类型的东西。

提前非常感谢!