【发布时间】:2018-01-06 16:23:28
【问题描述】:
我想重新访问post。目前,我正在尝试避免在程序中混合 Rad 和 Degree 类型的角度产生的错误。
例如:
typedef float Degree;
typedef float Radian;
Degree a = 15.;
Radian b = 3.14/4.;
float c = a + b; // no compile error
是否有新的更新解决方案?
编辑 01:
我求助于编写自己的类,希望它的体积小且没有依赖性。这是工作代码
#include <stdio.h>
#include <iostream>
template<typename numT>
class RadAngle {
public:
RadAngle() {
AngVal = 0.0;
}
RadAngle(const numT& angV) {
AngVal = angV;
}
void operator = (const RadAngle<numT>& ang1) {
AngVal = ang1.getVal();
}
RadAngle operator+(const RadAngle<numT>& ang1) const { return RadAngle<numT>(AngVal+ang1.getVal()); }
RadAngle operator-(const RadAngle<numT>& ang1) const { return RadAngle<numT>(AngVal-ang1.getVal()); }
RadAngle operator*(const RadAngle<numT>& ang1) const { return RadAngle<numT>(AngVal*ang1.getVal()); }
RadAngle operator/(const RadAngle<numT>& ang1) const { return RadAngle<numT>(AngVal/ang1.getVal()); }
numT getVal() const { return AngVal;};
private:
numT AngVal;
};
int main() {
RadAngle<float> a(1.5);
RadAngle<float> b(3.14);
RadAngle<float> c = a+b;
//std::cout << c << std::endl;
// printf("%.2f",c.getVal());
return 0;
}
【问题讨论】:
-
也许编写 Degree 和 Radian 类可能会解决问题,但我想编写运算符的额外工作可能很麻烦
-
看起来这是一个不合适的问题? stackoverflow.com/questions/23726038/…
-
所以可能没有办法解决这个问题?上一篇文章是在 2014 年。我希望使用这种类型安全功能从我的代码中删除错误