c++ - Template Class Dependency Issue -


मेरे पास दो वर्ग हैं, DynamicCollection और शब्दकोष शब्दकोष से डायनामिक कलेक्शन से प्राप्त होता है और दोनों वर्ग टेम्पलेट हैं इस तरह दिखें:

  टेम्पलेट & lt; typename ValueType & gt; क्लास DynamicCollection; टेम्पलेट & lt; typename कीटाइप, टाइपनामनाम ValueType & gt; क्लास डिक्शनरी: पब्लिक डायनेमिक कलेक्शन & lt; कीवालपेअर & lt; कीटाइप, वैल्यू टाइप & gt; & gt ;;   

मुझे जो मुद्दा आ रहा है वह यह है कि डायनेमिक कलेक्शन को एक विधि GroupBy होना चाहिए, जिसका घोषणा इस प्रकार दिखता है: <पूर्व> टेम्पलेट & lt; typename selector & gt; शब्दकोश & lt; चयनकर्ता, आइकलिंग & lt; मूल्य प्रकार & gt; * & gt; * समूहबी (मानक :: कार्य & lt; चयनकर्ता (मूल्य प्रकार) & gt; मूल्यांकनकर्ता);

तो मुझे जो समस्या है वह एक परिपत्र निर्भरता है, और मुझे नहीं पता कि यह कैसे लिखना है ताकि यह काम करे। मैंने डिक्शनरी को DynamicCollection हैडर में आगे की घोषणा करने की कोशिश की है, और फिर डिक्शनरी शीर्ष लेख में विधि को परिभाषित करने की कोशिश की है, लेकिन तब मैं इस में आया हूं अजीब स्थिति:

  टेम्पलेट & lt; typename selector & gt; शब्दकोश & lt; चयनकर्ता, आइकलिंग & lt; मूल्य प्रकार & gt; * & gt; * डायनेमिक कलेक्शन :: समूहबी (मानक :: कार्य & लेफ्टिनेंट; चयनकर्ता (वैल्यू टाइप) & gt; मूल्यांकनकर्ता);   

लेकिन, जैसा कि आप अनुमान लगा सकते हैं, डायनेमिक कलेक्शन को एक टेम्पलेट तर्क सूची और फ़ंक्शन ऑब्जेक्ट के ValueType की आवश्यकता है जैसा कि आइकलिंग रिटर्न में) ValueType से डायनेमिक कलेक्शन घोषणा होने की आवश्यकता है। इसलिए, यह स्पष्ट रूप से गलत कोड है, लेकिन मुझे लगता है कि ऐसा कुछ ऐसा होगा (यदि मुझे इसे डिक्शनरी हैडर में परिभाषित करना होता है):

  टेम्पलेट & lt; typename ValueType & gt; टेम्पलेट & lt; typename selector & gt; शब्दकोश & lt; चयनकर्ता, आइकलेंक्शन & lt; मूल्य प्रकार & gt; * & gt; * डायनेमिक कलेक्शन & lt; मूल्य प्रकार & gt; :: समूहबी (मानक :: कार्य & लेफ्टिनेंट; चयनकर्ता (वैल्यू टाइप) & gt; मूल्यांकनकर्ता);   

क्योंकि जब मैं इसे इस तरह से परिभाषित करता हूं:

  टेम्पलेट & lt; typename ValueType, typename selector & gt; शब्दकोश & lt; चयनकर्ता, आइकलेंक्शन & lt; मूल्य प्रकार & gt; * & gt; * डायनेमिक कलेक्शन & lt; मूल्य प्रकार & gt; :: समूहबी (मानक :: कार्य & लेफ्टिनेंट; चयनकर्ता (वैल्यू टाइप) & gt; मूल्यांकनकर्ता);   

मुझे यह कहते हुए एक त्रुटि मिलती है कि यह मिलान योग्य घोषणा नहीं मिल पाती है (जो की तरह मुझे समझ में आती है)।

प्रश्न यह है कि: मैं कैसे इस विधि को सही और घोषित कर सकता हूं ?

भाषा के दृष्टिकोण से, आप डिक्शनरी टेम्पलेट परिभाषित करने से पहले DynamicCollection प्रकार को परिभाषित करें, और फिर परिभाषित करने से पहले DynamicCollection & lt; ValueType & gt ;: GroupBy पी> यह कहा जा रहा है, जबकि आप इसे संकलित कर सकते हैं, आपके पास अभी भी एक चक्रीय निर्भरता है, और यह अक्सर डिजाइन पर गंध होता है चक्रीय निर्भरता को हटाने के लिए विभिन्न तकनीकों हैं, सबसे अधिक आम एक और घटकों में विभाजित है और कोड का एक भाग उच्च / निचले स्तर पर स्थानांतरित करना है इस विशेष मामले में, आप GroupBy को DynamicCollection के बाहर एक मुफ्त फ़ंक्शन या उपयोग करने पर विचार करना चाह सकते हैं, इस तरह निर्भरताएं इन में बदल जाती हैं:

  GroupBy - free function या component v शब्दकोश v डायनेमिक कलेक्शन   

डिज़ाइन का संपूर्ण दृश्य या बिना हल करने की समस्या भी यह कहना मुश्किल है कि यह सबसे अच्छा समाधान है , लेकिन सामान्य दृष्टिकोण परवाह किए बिना काम करना चाहिए।

Comments

Popular posts from this blog

Verilog Error: output or inout port "Q" must be connected to a structural net expression -

jasper reports - How to center align barcode using jasperreports and barcode4j -

c# - ASP.NET MVC - Attaching an entity of type 'MODELNAME' failed because another entity of the same type already has the same primary key value -