Typedef для принудительного применения свойства к типу - PullRequest
0 голосов
/ 22 февраля 2019

Я хочу создать свой собственный тип, который утверждает какое-то свойство во время выполнения, но в остальном ведет себя точно так же, как другой тип.

Чтобы лучше понять, что я имею в виду, на мгновение представьте, что целочисленные типы без знака несуществует, и я хочу создать свой собственный тип для их представления на основе 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 ++?

...