繁体   English   中英

如何在 rust 宏中扩展多个特征边界?

[英]How are multiple trait bounds expanded in a rust macro?

我有一些 Rust 代码相当于下面的代码片段,它不能编译

trait A {}
trait B {}

macro_rules! implement {
    ( $type:ty ) => {
        struct C<T: $type> { // <-- Changing "$type" to "A + B" compiles
            t: T,
        }
    }   
}

implement!(A + B); 

fn main() {}

rustc 1.44.1编译它会产生:

error: expected one of `!`, `(`, `,`, `=`, `>`, `?`, `for`, lifetime, or path, found `A + B`

同时用A + B替换$type编译。

我的问题是为什么它不能按原样编译,如何改变它呢?

(注意:Rust 有点新,我相信 go 有更简单的方法来解决这个问题,任何建议都会有所帮助)

ty宏参数类型有不同的用途:它是type ,而不是bound 您可以为此使用多个令牌:

macro_rules! implement {
    ( $($token:tt)* ) => {
        struct C<T: $($token)*> {
            t: T,
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM