在C++11中,您可以将通用类型降解为值类型,去除参考/右值语义和cv限定符,例如:
decay<int>::type // type is `int`
decay<const int&>::type // type is `int`
decay<int&&>::type // type is `int`
在Rust中是否有已知机制可以实现相同的效果,即去除引用修饰符、生命周期和mut
限定符?例如:
decay<u32>::type <--- type is `u32`
decay<&u32>::type <--- type is `u32`
decay<&mut u32>::type <--- type is `u32`
decay<&static u32>::type <--- type is `u32`
背景:我正在尝试编写一个宏,用于生成一个struct
,该结构存储由宏匹配的一堆函数参数的值。例如,宏可能包含参数foo: i32, bar:&Vec<String>
,生成的结构应为:
struct GeneratedStruct {
foo: i32,
bar: Vec<String>,
}
type I32Ref = &'static i32; ...; decay!(I32Ref)
应该会产生i32
,但在词法层面上是不知道这一点的。 - kennytmtrait Decay { type Type; }
的主意,然而...虽然它可以实现&'a T
和&'a mut T
两者,但我不能只为T
实现它,因为那会产生冲突。 - Matthieu M.