在某些情况下,我想利用Rust中的任何替代方法来解决C ++的friend
关键字。在箱子里 A 我有以下模块:
mod a0 :
pub struct A {
pub a0: u8,
a1: SomeType,
}
impl A {
pub fn fa0(...) { ... }
fn fa1(...) { ... }
}
模块b0
和c0
需要访问A
的所有公共和私有成员。代码不能这样做,除非它在mod a0
中。我只想将A
,A::a0
和A::fa0
公开给与此包装箱接口的其他包装箱,但在此包装箱内,我希望能够访问A
的完整实施(公共和私有的)。
我通常会做类似的事情:
mod a0 :
pub struct A {
pub a0: u8,
inner: Inner
}
pub struct Inner { /* all pub fields */ }
pub fn get_inner<'a>(obj: &'a mut A) -> &'a Inner {
&mut obj.inner
}
模块b0
和c0
访问get_inner
,因此访问Inner
,而lib.rs
我这样做:
mod a0;
mod b0;
mod c0;
pub use a0::A; // so other crates cannot use get_inner(...) etc.
这看起来很复杂,我似乎错过了一些东西。或者这是唯一的方法吗?
答案 0 :(得分:7)
现在RFC 1422已被接受,这是可能的!您可以将结构定义中的pub
替换为:
pub(crate)
允许在当前包内进行访问pub(super)
允许访问当前模块的父级pub(in some_module)
允许some_module
答案 1 :(得分:0)
作为一种解决方法,可以将某些内容公开,然后使用django-summernote
隐藏文档。隐藏的比特应该不是API等的一部分,并且通常人们无论如何都不会使用它们,因为它们依赖于文档和示例。