我想使用macro_rules
为特征创建一个实现。类型应作为宏参数给出。但是,其中一些类型可能包含生存期,因此我需要它们。我在宏内部也有一个通用类型。结果应该像
impl<T> Foo<T> for MyType { .. }
// Or with lifetime:
impl<'a, 'b, T> Foo<T> for LifetimeType<'a, 'b> { .. }
我如何构造宏以及如何调用它?
答案 0 :(得分:1)
您可以使用lifetime
说明符来匹配宏参数中的生存期:
trait Foo{}
macro_rules!impl_foo {
($($l:lifetime),*; $t:tt) => { impl<$($l),*> Foo for $t<$($l),*> {} };
($t:ty) => { impl Foo for $t {} };
}
并这样称呼它:
impl_foo!(A);
impl_foo!('a, 'b; B);
请注意,我能找到的谈论捕获的lifetime
指定者的唯一地方是the associated RFC。尽管The little book of Rust macros于2016年被合并,但它尤其明显地丢失了。