W niektórych przypadkach chciałbym wykorzystać dowolną alternatywę słowa kluczowego Rust na C++: friend
. W skrzyni Mam następujące moduły:C++ Konstrukcja podobna do znajomego dla Rust
mod A0:
pub struct A {
pub a0: u8,
a1: SomeType,
}
impl A {
pub fn fa0(...) { ... }
fn fa1(...) { ... }
}
Moduły b0
i c0
potrzebują dostępu do wszystkich członków publicznych i prywatnych A
. Kod nie może tego zrobić, chyba że jest w mod a0
. Chcę udostępnić tylko A
, A::a0
i A::fa0
innym skrzynkom współpracującym z tą skrzynką, ale w tej skrzynce chcę mieć dostęp do pełnej implementacji A
(publicznych i prywatnych).
I zazwyczaj kończy się robi coś takiego:
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
}
Moduły b0
i c0
dostępu get_inner
i stąd Inner
, natomiast w lib.rs
zrobić:
mod a0;
mod b0;
mod c0;
pub use a0::A; // so other crates cannot use get_inner(...) etc.
To wydaje się bardzo conv oszołomiony i wydaje mi się, że czegoś mi brakuje. A może to jedyny sposób na zrobienie tego?
Nie jest jeszcze możliwe. Poczekaj na [RFC 1422] (https://github.com/rust-lang/rfcs/pull/1422), aby rozwiązać ten problem. –
Model RFC 1422 został [zaakceptuj] (https://github.com/rust-lang/rfcs/pull/1422#issuecomment-199443868) w dniu 21 marca 2016 r. – malbarbo