作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 macro_rules
来创建一个特征的实现。类型应作为宏参数给出。但是,其中一些类型可能包含生命周期,所以我需要它们。我还有一个来自宏内部的泛型类型。结果应该是这样的
impl<T> Foo<T> for MyType { .. }
// Or with lifetime:
impl<'a, 'b, T> Foo<T> for LifetimeType<'a, 'b> { .. }
如何构造宏以及如何调用它?
最佳答案
您可以使用 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 年合并了……
关于rust - 如何提供可选泛型作为 macro_rules 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58400467/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!