कुछ मामलों में मैं जंग से सी ++ के friend
कीवर्ड में जो भी विकल्प लेता हूं, उसका लाभ उठाना चाहता हूं।सी ++ जंग के लिए मित्र-जैसे निर्माण
आधुनिक 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
(सार्वजनिक और निजी) के पूर्ण कार्यान्वयन तक पहुंच चाहता हूं।
आधुनिक 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.
यह बहुत दृढ़ लगता है oluted और मुझे कुछ याद आ रही है। या यह ऐसा करने का एकमात्र तरीका है?
अभी तक संभव नहीं है। इस समस्या को हल करने के लिए [आरएफसी 1422] (https://github.com/rust-lang/rfcs/pull/1422) के लिए प्रतीक्षा करें। –
21 मार्च 2016 को आरएफसी 1422 [स्वीकार] (https://github.com/rust-lang/rfcs/pull/1422#issuecomment-199443868) था। – malbarbo