मैं अपने सी ++ सिमुलेशन सॉफ़्टवेयर को लाइब्रेरी में कुछ कोड विभाजित करने की कोशिश कर रहा हूं, इसलिए इसका उपयोग अधिक लचीला रूप से किया जा सकता है। सिमुलेशन Lattice
पर आधारित है, जिसमें Node
एस शामिल हैं जो पॉइंटर्स की सूचियों को उनके Neighbor
एस में रखते हैं। । पड़ोसियों भी नोड कर रहे हैं, मैं अतिरिक्त तर्क/क्षेत्रों को लागू करने के क्रम में *Node
सूचक के चारों ओर एक छोटे से आवरण वर्ग करना चाहते हैं (जैसे, bool is_neares_neighbor
या तोकौन सी सी ++ पैटर्न लाइब्रेरी के लिए उपयोग करने के लिए है जो इसकी कक्षाओं को विस्तारित करने की अनुमति देता है?
मेरी कक्षा वास्तुकला इसलिए कुछ इस तरह दिखता है:
class Lattice {
private:
vector<Node> _nodes;
};
class Node {
private:
vector<Neighbor> _neighbors;
};
class Neighbor {
private:
Node * _node;
};
अब तक तो अच्छा। अब, मैं सब जाली संबंधी तर्क को संभालने के लिए मेरे पुस्तकालय है, लेकिन कुछ भी नहीं करना चाहते हैं। हालांकि, जब कुछ परियोजना में लाइब्रेरी का उपयोग कर, तीन वर्गों (Lattice
, Node
, Neighbor
) में अधिक तर्क और क्षेत्र होंगे। इसलिए उपयोगकर्ता को इन कक्षाओं से उत्तराधिकारी और अपने रिवाज को लागू करने में सक्षम होना चाहिए सामान, जबकि लाइब्रेरी अभी भी सभी जरूरी जाली से संबंधित तर्क को संभालती है।
ऐसा करने का अनुशंसित तरीका क्या है? क्या यहां टेम्पलेट उपयुक्त हैं? एक टेम्प्लेटेड स्थिति में, मेरी क्लास पदानुक्रम इस प्रकार दिखाई देगा:
template<class N>
class Lattice {
private:
vector<N> _nodes;
};
template<class NN>
class Node {
private:
vector<NN> _neighbors;
};
template<class N>
class Neighbor {
private:
N * _node;
};
आप देख सकते हैं, एक-दूसरे के प्रकार है, जो एक परिपत्र हालत मैं पता नहीं है कैसे निपटने के लिए है पता करने के लिए दोनों Node
और Neighbor
जरूरत यहां साथ। इसके अलावा, पूरी लाइब्रेरी को हेडर फाइलों में रहना होगा।
सी ++ दुनिया में इन तरह की स्थितियों को सबसे सुंदर तरीके से कैसे पेश किया जाता है?
एन और एनएन क्या हैं? मुझे लगता है कि मेरे पास पूछे जाने वाले प्रश्न का समाधान है, हालांकि मुझे पड़ोसी के अंदर नोड के लिए कच्चे सूचक के बारे में कुछ चिंताएं हैं। –
क्या नोड और पड़ोसी के प्रकार वास्तव में एक दूसरे से पूरी तरह से स्वतंत्र हैं? क्या एक विशिष्ट प्रकार का नोड एक विशिष्ट प्रकार का पड़ोसी नहीं है? मैं नोड और पड़ोसी को अमूर्त कक्षाओं (इंटरफेस) के रूप में कल्पना करता हूं और उनसे कंक्रीट नोड्स और पड़ोसियों को प्राप्त करता हूं। लेकिन शायद मुझे आपकी आवश्यकता गलत हो गई। –
अरे, उत्तर देने के लिए दोनों धन्यवाद। @ केनीओस्ट्रॉम: एन और एनएन क्रमशः 'नोड' और 'पड़ोसी' से प्राप्त कक्षाएं हैं, जो उपयोगकर्ता द्वारा प्रदान की जाती हैं। तो उपयोगकर्ता 'नोड' और' पड़ोसी 'वर्ग दोनों में फ़ंक्शन और चर जोड़ सकता है। @ फ्रैंकफफर: वे निर्भर नहीं हैं। दो 'नोड', काउंटरों और अन्य के बीच संबंधों में बहुत सी मेटा जानकारी मौजूद हो सकती है। यह 1: एन रिश्ते की तरह है जहां संबंधों के बारे में अतिरिक्त जानकारी संग्रहीत की जा सकती है। हालांकि, यदि संभवतः कोई अन्य समाधान नहीं है, तो शायद यह वह हिस्सा है जिसे मैं आसानी से छोड़ सकता हूं। मैं बस इसे बहुत लचीला बनाना चाहता हूं। – janoliver