Я хочу создать свой собственный тип, который утверждает какое-то свойство во время выполнения, но в остальном ведет себя точно так же, как другой тип.
Чтобы лучше понять, что я имею в виду, на мгновение представьте, что целочисленные типы без знака несуществует, и я хочу создать свой собственный тип для их представления на основе int
.
. Я могу сделать что-то вроде следующего:
struct uint {
int val;
uint(int v) : val (v) {
assert(v >= 0);
}
Но тогда я не могу использовать свой uint
struct как капля замены int
, потому что теперь мне нужно вызвать uint.val
для доступа к значению.Я бы хотел, чтобы uint
вел себя точно так же, как int
, но с добавленной проверкой во время выполнения во время построения, что значение больше нуля.
Go имеет встраивание типа через
type myint {
int
}
func New(int v) myint {
// Check v > 0
}
а у Rust есть псевдоним типа
type myint = int;
impl myint {
fn New(int v) -> myint {
// check that v > 0
}
}
Возможно ли добиться чего-то подобного в современном C ++?