首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将可见性标记传递给位标志!宏?

如何将可见性标记传递给位标志!宏?
EN

Stack Overflow用户
提问于 2020-08-17 22:24:18
回答 1查看 119关注 0票数 0

我用的是bitflags板条箱。我想为我的类型自动生成一些其他实现,所以我尝试从另一个宏调用bitflags!宏。在我希望能够处理可见性令牌之前,这种方法工作得很好。

我尝试了以下代码。

Playground

代码语言:javascript
复制
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;
    }
}

我希望这能正常工作,但我得到了以下错误

代码语言:javascript
复制
error: no rules expected the token `pub `

这是bitflags!宏的问题吗?或者我错误地传递了可见性令牌?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-17 23:36:58

bitflags! is defined中的$vis作为令牌树(tt),而不是可见性(vis)。可见性“最近”才被引入到rustc中,通过不重新定义$visbitflags!宏保持了向后兼容。

您需要在my_bitflags!中将$vis:vis更改为$vis:tt,这样它才能扩展为bitflags!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63452887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档