Trong một số trường hợp, tôi muốn tận dụng bất kỳ phương án thay thế nào trong từ khóa friend
của Rust to C++. Trong thùng Một tôi có các bộ phận sau:C++ Cấu trúc giống như bạn bè cho Rust
mod a0:
pub struct A {
pub a0: u8,
a1: SomeType,
}
impl A {
pub fn fa0(...) { ... }
fn fa1(...) { ... }
}
Modules b0
và c0
cần truy cập vào tất cả các thành viên công cộng và tư nhân của A
. Mã không thể làm điều đó trừ khi nó nằm trong mod a0
. Tôi chỉ muốn để lộ A
, A::a0
và A::fa0
cho các thùng khác giao tiếp với thùng này, nhưng trong thùng này tôi muốn truy cập vào việc triển khai hoàn chỉnh A
(công khai và riêng tư).
tôi thường kết thúc làm một cái gì đó như:
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
}
Modules b0
và c0
truy cập get_inner
và do đó Inner
, trong khi ở lib.rs
tôi làm:
mod a0;
mod b0;
mod c0;
pub use a0::A; // so other crates cannot use get_inner(...) etc.
Điều này có vẻ rất chuyển đổi oluted và tôi dường như thiếu một cái gì đó. Hay đây là cách duy nhất để làm điều đó?
Chưa thể. Đợi [RFC 1422] (https://github.com/rust-lang/rfcs/pull/1422) để giải quyết vấn đề này. –
RFC 1422 đã được [chấp nhận] (https://github.com/rust-lang/rfcs/pull/1422#issuecomment-199443868) vào ngày 21 tháng 3 năm 2016. – malbarbo