क्या अग्रेषित घोषित वर्ग के सदस्य फ़ंक्शन को दोस्त के रूप में घोषित करना संभव है? मैं निम्न कार्य करने की कोशिश कर रहा हूँ:एक अग्रेषित घोषित वर्ग के सदस्य-फ़ंक्शन को मित्र के रूप में घोषित करें
class BigComplicatedClass;
class Storage {
int data_;
public:
int data() { return data_; }
// OK, but provides too broad access:
friend class BigComplicatedClass;
// ERROR "invalid use of incomplete type":
friend void BigComplicatedClass::ModifyStorage();
};
तो लक्ष्य के लिए (i) एक एकल विधि के लिए दोस्त घोषणा प्रतिबंधित है, और (ii) जटिल वर्ग की परिभाषा शामिल करने के लिए समय संकलन कम करने के लिए नहीं।
एक दृष्टिकोण एक मध्यस्थ के रूप में एक वर्ग अभिनय जोड़ने के लिए हो सकता है:
// In Storage.h:
class BigComplicatedClass_Helper;
class Storage {
// (...)
friend class BigComplicatedClass_Helper;
};
// In BigComplicatedClass.h:
class BigComplicatedClass_Helper {
static int &AccessData(Storage &storage) { return storage.data_; }
friend void BigComplicatedClass::ModifyStorage();
};
बहरहाल, यह थोड़ा अनाड़ी लगता है ... इसलिए मुझे लगता है कि वहाँ एक बेहतर समाधान किया जाना चाहिए!
संभावित डुप्लिकेट [कैसे एक दोस्त को घोषित करने के लिए जो सी ++ में किसी अन्य परिभाषित वर्ग का सदस्य फ़ंक्शन नहीं है?] (Http://stackoverflow.com/questions/ 4355660/कैसे-से-घोषणा-एक-दोस्त-वह-सदस्य-कार्य-एक-अभी-अभी-परिभाषित-क्लैस नहीं है) –
संदर्भ के लिए धन्यवाद - मैंने यह प्रश्न देखा; हालांकि इसका स्वीकार्य उत्तर बहुत व्यापक वर्ग-स्तर का उपयोग है जिसे मैं टालना चाहता था ... – hrr