In bestimmten Fällen möchte ich jede Alternative nutzen, die in Rust zu C++ friend
Schlüsselwort ist. In Kiste A Ich habe folgende Module:C++ Friend-like construct für Rust
mod a0:
pub struct A {
pub a0: u8,
a1: SomeType,
}
impl A {
pub fn fa0(...) { ... }
fn fa1(...) { ... }
}
Module b0
und c0
brauchen Zugang zu allen öffentlichen und privaten Mitgliedern A
. Code kann das nicht tun, es sei denn, es ist in mod a0
. Ich möchte nur A
, A::a0
und A::fa0
anderen Kisten zugänglich machen, die mit dieser Kiste verbunden sind, aber innerhalb dieser Kiste möchte ich Zugriff auf die vollständige Implementierung von A
(öffentlich und privat) haben.
ich am Ende in der Regel etwas zu tun, wie:
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
}
Module b0
und c0
Zugang get_inner
und damit Inner
, während in lib.rs
ich tun:
mod a0;
mod b0;
mod c0;
pub use a0::A; // so other crates cannot use get_inner(...) etc.
Das scheint sehr conv oluted und ich vermisse etwas. Oder ist das der einzige Weg, es zu tun?
Noch nicht möglich. Warten Sie auf [RFC 1422] (https://github.com/rust-lang/rfcs/pull/1422), um dieses Problem zu lösen. –
Die RFC 1422 wurde am 21. März 2016 [akzeptieren] (https://github.com/rust-lang/rfcs/pull/1422#issuecomment-199443868). – malbarbo