से गृहीत को छिपाने के लिए मैं कैसे एक प्रकार एक उस प्रकार टी का एक उद्देश्य के लिए अपने छिपा गृहीत उपज लेकिन बाकी सब से गृहीत छुपा देगा चाहते हैं। मेरा सी ++ कंपाइलर जीसीसी 4.4 होता है, लेकिन इससे कोई फर्क नहीं पड़ता। यह क्यों काम नहीं करेगा?हर किसी को है, लेकिन कक्षा टी
#include <iostream>
template <class T> class A {
private:
int n1;
public:
friend class T;
A(const int n0 = 0) : n1(n0) {}
};
class B {
public:
int f(const A<B> a) const { return a.n1; }
B() {}
};
int main() {
const A<B> a(5);
const B b;
const int m = b.f(a);
std::cout << m << "\n";
return 0;
}
संयोग से, इस ठीक काम करता है, को छोड़कर यह गृहीत को छिपाने के लिए विफल रहता है कि:
#include <iostream>
template <class T> class A {
private:
int n1;
public:
int n() const { return n1; }
A(const int n0 = 0) : n1(n0) {}
};
class B {
public:
int f(const A<B> a) const { return a.n(); }
B() {}
};
int main() {
const A<B> a(5);
const B b;
const int m = b.f(a);
std::cout << m << "\n";
return 0;
}
करता है सी ++ वास्तव में एक दोस्त वर्ग टेम्पलेट पैरामीटर के रूप में संकलन समय पर निर्दिष्ट किया जा करने की अनुमति नहीं? क्यों नहीं? यदि नहीं, तो डेटाम को छिपाने के लिए मुझे किस वैकल्पिक तकनीक का उपयोग करना चाहिए? (यदि संभव हो तो एक संकलन-समय तकनीक पसंद करेगी।)
कृपया मेरी गलतफहमी क्या है, कृपया?
(मैं संबंधित प्रश्नों here और here, करने के लिए कुछ जवाब देख लेकिन या तो वे मेरी विशेष सवाल का जवाब नहीं है या मैं समझ जाता है कि वे ऐसा करने में विफल रहते। किसी भी दर पर, शायद मैं गलत तकनीक को पूरी तरह उपयोग कर रहा हूँ। हालांकि मैं मित्र वर्ग टी क्यों विफल रहता है, मैं वास्तव में जानना चाहता हूं कि दोस्त या अन्य माध्यमों के साथ डेटम को कैसे छिपाना है।)
धन्यवाद।
अच्छी सलाह। जब तक मैं कुछ बेहतर तरीके से नहीं आ सकता, मुझे सलाह का पालन करना चाहिए। धन्यवाद। – thb
ज़ीओ द्वारा सुझाए गए पासकी मुहावरे के साथ-साथ अटॉर्नी-क्लाइंट मुहावरे को भी देखें। यह थोड़ी देर हो गया है क्योंकि मैंने उन लोगों के बारे में पढ़ा है, इसलिए मेरा समाधान उन मुहावरों का एक रूप हो सकता है। –