相关疑难解决方法(0)

为什么要定义具有单元类型的单个私有字段的结构?

为什么ParseBoolError会有_priv字段:

pub struct ParseBoolError {
    _priv: (),
}
Run Code Online (Sandbox Code Playgroud)

我不认为该_priv领域被使用。

rust

38
推荐指数
1
解决办法
1546
查看次数

什么是创建无法在其板条箱外实例化的零大小结构的惯用方法?

我有类似的东西:

mod private {
    // My crate
    pub struct A;
    
    impl A {
        pub fn new() -> Self {
            Self
        }
        // ...
    }
}

fn main() {
    // External code
    let obj = private::A::new();
    let obj2 = private::A;
}
Run Code Online (Sandbox Code Playgroud)

目前,A不需要存储任何内部状态来执行我想要的操作(它只是在枚举中用作占位符),因此我将其设为零大小的结构。然而,这在未来可能会改变,所以我想防止这个板条箱外的代码在A没有通过A::new()的情况下实例化(即obj2in的实例化main()应该失败)。

从本质上讲,我想要的效果就像我向 中添加了一个私有字段一样A,但我希望它保持零大小。

目前,我正在考虑这样的事情:

pub struct A {
    empty: (),
}
Run Code Online (Sandbox Code Playgroud)

或这个:

pub struct A(());
Run Code Online (Sandbox Code Playgroud)

但是,我不确定哪种方式最惯用。

idioms rust

6
推荐指数
1
解决办法
128
查看次数

标签 统计

rust ×2

idioms ×1