在某些情况下,我想利用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.
这似乎很复杂,我似乎错过了一些东西.或者这是唯一的方法吗?
现在RFC 1422已被接受,这是可能的!您可以pub
在结构定义中替换为:
pub(crate)
允许在当前箱子内进行访问
pub(super)
允许访问当前模块的父级
pub(in some_module)
允许访问 some_module