Предположим, что в моем коде где-то есть
using foo = int32_t;
и
using bar = int32_t;
, тогда по какой-то причине мне нужно провести различие между этим типом и другими int32_t
с (и ихпсевдонимы).Но - я все еще хочу, чтобы они вели себя так же, как int32_t
s.
Теперь я могу написать:
struct foo { int32_t value; }
struct bar { int32_t value; }
, который различает типы.Но - эти структуры не ведут себя как int
с вообще;Я даже не могу сравнить foo
с друг с другом!(Ну, во всяком случае, до C ++ 20)
Поскольку int32_t
не является классом, я не могу сделать:
struct foo : public int32_t { }
, хотя это будетдай мне именно то, что мне нужно.
Так что, похоже, я хочу добиться "упаковки" (а-ля Java, C # и т. Д.) Простых целых чисел в классы, а об остальном позаботится наследование.
Безусловно, можно вычеркнуть множество шаблонов и реализовать все соответствующие операторы для целых чисел: присваивание, сравнение, арифметика и т. Д. Но, вы знаете, DRY !
Если бы я мог переопределить оператор точка , это могло бы сэкономить мне весь код, но это предложение застряло и не похоже, что оно куда-нибудь скоро пойдет.
Так жеЕсть что-то еще, что я мог бы использовать, чтобы избежать всего этого шаблона?