具有不变性的快速类 int 类型? C++

Quick int-like type with invariant? C++

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

例如

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

...然后让类型像 int 一样可用?

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 岁有点悲观。梦想远大!