带不变量的快速类int类型?c++

Quick int-like type with invariant? C++

本文关键字:int 类型 c++ 不变量      更新时间:2023-10-16

是否有一种快速的方法可以在构造函数中定义具有int成员和不变量的类型…

class Age {
public:
    Age(int age) {
        Expects(0 <= age && age <= 125);
        age_ = age;
    }
private:
    int age_;
}

…然后让这个类型像整型一样可用?

Age a1 {32};
Age a2 {40};
cout << "Combined ages: " << a1 + a1;
Age a3 = a1 * 2;
// ...etc. etc.

(或者是重写所有操作符的唯一方法?)

谢谢你,约翰。

您可以添加返回值的operator int(),它将可用作整数

Expects可以拼写为assert(),然后您可以通过转换操作符暴露年龄,这将允许所有其他操作工作:

class Age {
public:
    Age(int a) : age_(a) {
        assert(0 <= age_ && age_ <= 125);
    }
    operator int() const { return age_; }
private:
    int age_;
};

旁注:将年龄限制为125岁有点悲观。梦大!