我正在考虑为lbs创建一个类,为kg创建一个单独的类,它们都从整数继承但不向它们添加任何内容。这将允许编译器验证正确的单元是否传递给函数。
这是最好的方法还是有更好的方法呢?
答案 0 :(得分:4)
就个人而言,我会有一个名为Mass
的类或类似的类,并且有一些方法可以在一个单元或另一个单元中返回对象的值。
class Mass
{
public:
Mass()
: mMassKG(0) {}
~Mass() {}
int kilograms() const { return mMassKG; }
int pounds() const { return mMassKG * 2.2; }
void setKilograms(int kg) { mMassKG = kg; }
void setPounds(int lbs) { mMassKG = lbs / 2.2; }
private:
int mMassKG;
};
答案 1 :(得分:0)
为什么不创建一个获取整数(setter)并返回getKg或getLbs方法的类?
答案 2 :(得分:0)
您能举例说明您需要的各种功能吗?根据您的需要,您可能最好为lbs和kgs(例如
)进行单独的方法调用public void doXlbs() {
...
}
和
public void doXkgs() {
...
}
答案 3 :(得分:0)
彻底未经测试,但这样的事情可以解决问题并提供合理的类型安全性:
template<typename T>
class Unit
{
public:
explicit Unit(float size) : m_size(size) {}
float size() const { return m_size; }
Unit operator += (Unit rhs) { m_size += rhs.size(); return *this; }
private:
float m_size;
};
template<typename T>
Unit<T> operator+ (Unit<T> lhs, Unit<T> rhs)
{
return lhs += rhs;
}
// Plus more useful operators that you need...
struct Kg {};
struct Lb {};
typedef Unit<Kg> Kilograms;
typedef Unit<Lb> Pounds;
Kilograms lbToKg(Pounds lb)
{
return Kilograms(lb.size() / 2.2);
}
Pounds kgToLb(Kilograms kg)
{
return Pounds(kg.size() * 2.2);
}