c++ - Resolving a Circular Dependency between Template Classes -


मेरे पास दो वर्ग हैं, Foo & lt; T & gt; और बार & lt; T & gt; , आधार से व्युत्पन्न। प्रत्येक एक विधि वर्चुअल बेस * कन्वर्ट (आईडी) const को अध्यारोहित करता है, जहां आईडी एक प्रकार का एक उदाहरण है जो कि Foo के विशिष्ट त्वरण की पहचान करता है या बार (यह एक enum का बहाना) है। समस्या यह है कि Foo :: कन्वर्ट () को बार उदाहरण वापस करने में सक्षम होना चाहिए, और इसी तरह बार :: कन्वर्ट () की जरूरत है फू को प्रारंभ करने में सक्षम होने के लिए चूंकि वे दोनों टेम्पलेट हैं, इसलिए इसका परिणाम Foo.h और बारहो के बीच एक परिपत्र निर्भरता में होता है। मैं इसका समाधान कैसे कर सकता हूं?

संपादित करें: आगे की घोषणा काम नहीं करती है क्योंकि प्रत्येक विधि के कार्यान्वयन के लिए अन्य वर्ग के कन्स्ट्रक्टर की आवश्यकता होती है:

< कोड> Foo.h :

<पूर्व> #include & lt; base.h & gt; टेम्पलेट & lt; कक्षा T & gt; कक्षा बार; टेम्पलेट & lt; कक्षा T & gt; वर्ग फू: सार्वजनिक बेस {...}; टेम्पलेट & lt; कक्षा T & gt; बेस * फू & लेफ्टिनेंट; टी & gt; :: कन्वर्ट (आईडी आईडी) const {if (id == BAR_INT) नया बार & lt; int & gt; (मान) लौटाता है; // त्रुटि ...}

बार.h :

  #include & lt; base.h & gt; टेम्पलेट & lt; कक्षा T & gt; वर्ग फू; टेम्पलेट & lt; कक्षा T & gt; वर्ग बार: सार्वजनिक बेस {...}; टेम्पलेट & lt; कक्षा T & gt; बेस * बार & lt; T & gt; :: कन्वर्ट (आईडी आईडी) const {if (आईडी == FOO_FLOAT) नया फ़ू & lt; float & gt; (मान) लौटाता है; // त्रुटि ...}  

त्रुटि, स्वाभाविक रूप से, "अपूर्ण प्रकार का अमान्य उपयोग"।

आप को क्या करने की आवश्यकता है कार्यान्वयन से वर्ग घोषणाओं से अलग है। तो कुछ ऐसा

  टेम्पलेट & lt; वर्ग T & gt; वर्ग फू: सार्वजनिक आधार {सार्वजनिक: बेस * कन्वर्ट (आईडी) कॉन्स्ट; } टेम्पलेट & lt; वर्ग T & gt; वर्ग बार: सार्वजनिक आधार {सार्वजनिक: बेस * कन्वर्ट (आईडी) कॉन्स्ट; } टेम्पलेट & lt; वर्ग T & gt; बेस * फू & lt; T & gt; :: कन्वर्ट (आईडी) const {नया बार & lt; T & gt ;;} टेम्पलेट & lt; class T & gt; बेस * बार & lt; T & gt; :: कन्वर्ट (आईडी) const {रिटर्न न्यू फ़ू & lt; T & gt;;}  

इस तरह, जब आपके कार्यों को परिभाषित किया जाता है, तो आपके पास पूर्ण कक्षा की परिभाषा होती है।


Comments

Popular posts from this blog

c# - sqlDecimal to decimal clr stored procedure Unable to cast object of type 'System.Data.SqlTypes.SqlDecimal' to type 'System.IConvertible' -

Calling GetGUIThreadInfo from Outlook VBA -

Obfuscating Python code? -