我想创建自己的类型,该类型在运行时声明某些属性,但在行为上却与另一种类型完全相同。
为了更好地理解我的意思,假装暂时不存在无符号整数类型,我想基于int
创建自己的类型来表示它们。
我可以执行以下操作:
struct uint {
int val;
uint(int v) : val (v) {
assert(v >= 0);
}
但是我不能用我的uint
结构来代替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 ++中能否实现这样的目标?