Быстрый int-подобный тип с инвариантом? Переполнение стека

Есть ли быстрый способ определить тип, который имеет член 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.

(Или это единственный способ переопределить все операторы?)

Спасибо, Джон.

1

Решение

Можете добавить operator int() возвращая значение, и оно будет использоваться как целое число.

3

Другие решения

Expects можно записать assert(), и затем вы можете выставить возраст через оператора преобразования, который позволит работать всем вашим другим операциям:

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

operator int() const { return age_; }

private:
int age_;
};

Ограничивающий возраст возраст 125 лет немного пессимистичен. Большая мечта!

1

По вопросам рекламы [email protected]