gpt4 book ai didi

c++ - Boost Units使用题——hash_value、计数乘法

转载 作者:搜寻专家 更新时间:2023-10-31 01:53:29 26 4
gpt4 key购买 nike

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

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

    float baseMass = 14.95;
    float totalMass = baseMass * 12;

    但是,对单位做同样的事情(dalton_t 是数量的类型定义)

    dalton_t baseMass = 14.95 * units::dalton_mass;
    dalton_t totalMass = baseMass * 12;

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

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

    typedef boost::unordered_set<types::dalton_t> DaltonSet;
    DaltonSet dSet;
    dalton_t testMass(13384.384 * phobos::units::dalton_mass);
    dSet.insert(testMass);

    这提供了一个错误“没有匹配的函数来调用 hash_value”,即使它是在单元的头文件中定义的。

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

单位头文件如下:

#ifndef UNITS_H_
#define UNITS_H_
#include <boost/functional/hash.hpp>
#include <boost/units/conversion.hpp>
#include <boost/units/io.hpp>
#include <boost/units/pow.hpp>
#include <boost/units/systems/si.hpp>
#include <boost/units/systems/si/prefixes.hpp>

namespace phobos {


namespace units {
using boost::units::mass_dimension;
using boost::units::pow;
using boost::units::root;
using boost::units::quantity;
using boost::units::unit;

struct amu_mass_base_unit :
boost::units::base_unit<amu_mass_base_unit, mass_dimension, 1> {
static std::string name() { return "atomic mass unit"; }
static std::string symbol() { return "u"; }
};

typedef boost::units::make_system<amu_mass_base_unit>::type amu_system;
typedef unit<mass_dimension, amu_system> amu_mass;
static const amu_mass dalton_mass;
} /* namespace units */

namespace types {
using boost::units::quantity;
typedef quantity<units::amu_mass, float> amu_t;
typedef amu_t dalton_t;
} /* namespace types */
} /* namespace phobos */

BOOST_UNITS_DEFINE_CONVERSION_FACTOR(phobos::units::amu_mass_base_unit,
boost::units::si::kilogram_base_unit,
float, 1.66053892173e-27);

std::size_t hash_value(const phobos::types::amu_t &amu) {
return boost::hash_value(amu.value());
}

#endif /* UNITS_H_ */

提前致谢!

亚当

最佳答案

您的第一个问题捕获了 Boost.Units 的一个已知弱点:算术表达式中没有类型 boost ,因此标量必须与数量的类型相匹配。 baseMass * 12.0f 应该有效。

关于c++ - Boost Units使用题——hash_value、计数乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11087802/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com