gpt4 book ai didi

rust - 如何将可见性 token 传递给位标志!宏?

转载 作者:行者123 更新时间:2023-12-03 11:42:52 24 4
gpt4 key购买 nike

我正在使用bitflags crate 。我想为我的类型自动生成其他实现,因此我尝试从另一个宏调用bitflags!宏。在我希望能够处理可见性 token 之前,此方法一直很好。
我尝试了以下代码。
Playground

use bitflags::bitflags;

macro_rules! my_bitflags {
(
$(#[$outer:meta])*
$vis:vis struct $name:ident: $ty:ty {
$(
$(#[$inner:ident $($args:tt)*])*
const $flag:ident = $value:expr;
)+
}
) => {
bitflags! {
$(#[$outer])*
$vis struct $name: $ty {
$(
$(#[$inner $($args)*])*
const $flag = $value;
)+
}
}

// other implementations on $name here
//
}
}


my_bitflags! {
pub struct Flags: u32 {
const A = 0x1;
const B = 0x2;
const C = 0x4;
}
}
我希望这可以正常工作,但出现以下错误
error: no rules expected the token `pub `
这是 bitflags!宏的问题吗?还是我不正确地传递了可见性 token ?

最佳答案

$vis中的bitflags! is defined作为 token 树(tt),而不是作为可见性(vis)。仅在rustc中“最近”引入了可见性,并且bitflags!宏通过不重新定义$vis来保持向后兼容。
您需要将$vis:vis中的$vis:tt更改为my_bitflags!,以便可以扩展为bitflags!

关于rust - 如何将可见性 token 传递给位标志!宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63452887/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com