【发布时间】:2016-05-10 14:21:37
【问题描述】:
在某些情况下,我想利用 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.
这看起来很复杂,我似乎遗漏了一些东西。或者这是唯一的方法吗?
【问题讨论】:
标签: rust encapsulation