struct - 如何在不为每个字段重复 `pub` 的情况下创建所有字段都是公共(public)的公共(public)结构?

标签 struct rust public rust-macros

我如何在 Rust 中定义一个公共(public)结构,其中所有字段都是公共(public)的,而不必在每个字段前面重复 pub 修饰符?

pub_struct 宏是理想的选择:

pub_struct! Foo {
    a: i32,
    b: f64,
    // ...
}

相当于:

pub struct Foo {
    pub a: i32,
    pub b: f64,
    //...
}

最佳答案

macro_rules! pub_struct {
    ($name:ident {$($field:ident: $t:ty,)*}) => {
        #[derive(Debug, Clone, PartialEq)] // ewww
        pub struct $name {
            $(pub $field: $t),*
        }
    }
}

不幸的是,derive 可能只适用于结构、枚举和联合,所以我不知道如何将它们提升给调用者。

用法:

pub_struct!(Foo {
    a: i32,
    b: f64,
});

如果我不需要括号和分号就好了,也就是说,如果 Rust 支持读取器宏。

关于struct - 如何在不为每个字段重复 `pub` 的情况下创建所有字段都是公共(public)的公共(public)结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53866508/

相关文章:

c - 如何在 C 结构中使用二维数组?

c - 如何仅使用结构中的几个结构成员在 c 中创建新的打包结构?

closures - 如何使用一个闭包作为另一个闭包的参数?

rust - 添加引用和数字值时了解(自动?)取消引用/强制

java - signature.verify() 总是返回 False

Salesforce (SFDC) - 公共(public)、静态、全局关键字 - 为整个类(class)使用一个列表?

c# - 将 C# 7.2 'in' 参数修饰符放在各处是否有用

c - sendto 中的参数无效

opencv - Rust 与 OpenCV 的奇怪行为

C++ 访问说明符