在某些情况下,我想利用Rust中的任何替代方案来替代C++的friend
关键字.在 crate 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
expose 在与这个 crate 连接的其他 crate 中,但在这个 crate 中,我想访问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.
这似乎很复杂,我似乎遗漏了一些东西.还是这是唯一的方法?