मान लीजिए कि मेरे पास दो ऑब्जेक्ट प्रकार हैं, ए और बी। उनके बीच संबंध कई-से-कई हैं, लेकिन दोनों में से कोई भी दूसरे का मालिक नहीं है।
ए और बी दोनों उदाहरणों को कनेक्शन के बारे में पता होना चाहिए; यह सिर्फ एक तरीका नहीं है।
तो, हम यह कर सकते हैं:
class A
{
...
private: std::vector<B *> Bs;
}
class B
{
private: std::vector<A *> As;
}
मेरा सवाल यह है: मैं कनेक्शन बनाने और नष्ट करने के लिए कार्य कहां करूं?
क्या यह A :: Attach (B) होना चाहिए, जो तब A :: Bs और B :: वैक्टर के रूप में अपडेट होता है?
या यह बी :: अटैच (ए) होना चाहिए, जो समान रूप से उचित लगता है।
न ही उनमें से कोई सही लगता है। अगर मैं कोड के साथ काम करना बंद कर दूं, और एक हफ्ते बाद वापस आऊं, तो मुझे यकीन है कि मैं ए। एटाच (बी) या बी.आट्टाच (ए) कर रहा हूं तो मुझे याद नहीं होगा।
शायद यह इस तरह से एक समारोह होना चाहिए:
CreateConnection(A, B);
लेकिन एक वैश्विक कार्य करना भी अवांछनीय लगता है, यह देखते हुए कि यह विशेष रूप से केवल ए और बी के साथ काम करने के लिए एक फ़ंक्शन है।
एक और सवाल: अगर मैं इस समस्या / आवश्यकता में अक्सर भाग जाता हूं, तो क्या मैं किसी तरह इसके लिए एक सामान्य समाधान कर सकता हूं? शायद एक TwoWayConnection वर्ग जिसे मैं इस प्रकार के संबंधों को साझा करने वाली कक्षाओं के भीतर से प्राप्त कर सकता हूं या उपयोग कर सकता हूं?
इस स्थिति को संभालने के लिए कुछ अच्छे तरीके क्या हैं ... मुझे पता है कि कैसे एक-से-कई "सी का मालिक डी" स्थिति को अच्छी तरह से संभालना है, लेकिन यह एक मुश्किल है।
संपादित करें: इसे और अधिक स्पष्ट करने के लिए, इस प्रश्न में स्वामित्व के मुद्दे शामिल नहीं हैं। A और B दोनों ही किसी अन्य ऑब्जेक्ट Z के स्वामित्व में हैं, और Z सभी स्वामित्व मुद्दों का ध्यान रखता है। मैं केवल ए और बी के बीच कई-से-कई लिंक बनाने / हटाने में दिलचस्पी रखता हूं।
Pointer
और GestureRecognizer
। संकेत इनपुटमैनगर वर्ग के स्वामित्व और प्रबंधित होते हैं। GestureRecognizers विजेट्स उदाहरणों के स्वामित्व में हैं, जो स्क्रीन उदाहरण के स्वामित्व में हैं, जो ऐप इंस्टेंस के स्वामित्व में है। पॉइंटर्स को GureureRecognizers को सौंपा गया है ताकि वे उन्हें कच्चा इनपुट डेटा फीड कर सकें, लेकिन GestureRecognizers को इस बात से अवगत रहने की आवश्यकता है कि वर्तमान में उनके साथ कितने पॉइंटर्स जुड़े हैं (1 उंगली बनाम 2 उंगली इशारों को भेद करने के लिए)।