Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 如何提供可选泛型作为宏规则参数?_Rust_Macros_Rust Macros - Fatal编程技术网

Rust 如何提供可选泛型作为宏规则参数?

Rust 如何提供可选泛型作为宏规则参数?,rust,macros,rust-macros,Rust,Macros,Rust Macros,我想使用macro\u规则为trait创建一个实现。类型应作为宏参数提供。但是,其中一些类型可能包含生命周期,因此我需要它们。我还有一个宏内部的泛型类型。结果应该是这样的 impl<T> Foo<T> for MyType { .. } // Or with lifetime: impl<'a, 'b, T> Foo<T> for LifetimeType<'a, 'b> { .. } impl Foo for MyType{..}

我想使用
macro\u规则
为trait创建一个实现。类型应作为宏参数提供。但是,其中一些类型可能包含生命周期,因此我需要它们。我还有一个宏内部的泛型类型。结果应该是这样的

impl<T> Foo<T> for MyType { .. }
// Or with lifetime:
impl<'a, 'b, T> Foo<T> for LifetimeType<'a, 'b> { .. }
impl Foo for MyType{..}
//或使用寿命:
生命周期类型{..}的impl Foo

如何构造宏以及如何调用宏?

您可以使用
生存期
说明符匹配宏参数中的生存期:

trait Foo{}

macro_rules!impl_foo {
    ($($l:lifetime),*; $t:tt) => { impl<$($l),*> Foo for $t<$($l),*> {} };
    ($t:ty) => { impl Foo for $t {} };
}

请注意,我能找到的唯一谈论捕获的
生存期
说明符的地方是。尤其明显的是,尽管它在2016年被合并,但它在

impl_foo!(A);
impl_foo!('a, 'b; B);