我正在尝试使用像这样的 boost-units 创建一个有维度的向量类,
//vector will be constructed vec<si::length> v(10, 1.0*si::metre);
template<typename dimension>
class vec
{
public:
//constructor setting all values to q.
vec(const size_t, const boost::units::quantity<dimension> q)
//etc
}
除了进行元素明智的乘法和除法operator*=
之外,一切都很好。operator/=
由于这些不会改变维度,因此它们仅在乘以/除以无量纲量时才有意义:我正在努力寻找未锁定到特定系统(例如 si 或 cgs 单位)的任意无量纲量。
我想要类似的东西,
/** Multiply a dimensionless vector. */
vec<dimension>&
operator*=(const vec<boost::units::dimensionless_type>& b);
或者可能是一些元编程魔法(我注意到 boost::units::is_dimensionless 存在,但我不知道如何使用它,因为我不精通一般元编程技术)
template<typename dimension>
template<typename a_dimensionless_type>
vec<dimension>&
vec<dimension>::operator*=(const vec<a_dimensionless_type>& b){
//some compile time check to make sure that a_dimensionless_type is actually dimensionless?
//the rest of the function
}
我想要以下示例进行编译
vec<si::dimensionless> d(10, 2.0);
vec<si::length> l(10, 2.0*si::metre);
l*=d;
vec<cgs::dimensionless> d2(10, 2.0);
vec<cgs::length> l2(10, 2.0*cgs::centimetre);
l2*=d2;