为什么ParseBoolError会有_priv字段:
pub struct ParseBoolError {
_priv: (),
}
Run Code Online (Sandbox Code Playgroud)
我不认为该_priv领域被使用。
我有类似的东西:
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)
但是,我不确定哪种方式最惯用。