c++ - When I need to specialize the typename I declared in my template class, what arguments I must use? -


मेरे पास धागा-सुरक्षित वेक्टर के लिए एक टेम्प्लेट क्लास है:

  टेम्पलेट & lt; class T & gt ; वर्ग साझा वेक्टर {std :: vector & lt; T & gt; vect; CRITICAL_SECTION cs; साझा वेक्टर (साझा साझा वेक्टर & lt; T & gt; & amp; rhs) {} सार्वजनिक: टाइप किया गया टाइप नाम std :: vector & lt; T & gt; :: size_type SizeType; SharedVector (); शून्य पुशबैक (कॉन्स्ट टी एण्ड वैल्यू); शून्य पॉपबैक (); आकार प्रकार आकार (); कॉन्स्ट टी एंड amp; ऑपरेटर [] (इंट इंडेक्स); शून्य मिटा (इंट इंडेक्स); शून्य लॉक (); शून्य अनलॉक (); आभासी ~ साझा वेक्टर (); };  

तब मैं ग्राहक प्रबंधक से इस वेक्टर को कुछ ज़िम्मेदारियों को प्रतिनिधि करने के लिए अपने ग्राहक प्रबंधक में टीसीपी सर्वर के लिए उपयोग करना चाहता हूं:

  class TCPClientManager {TCPClientManager ( Const TCPClientManager & amp;) {} TCPClientManager & amp; ऑपरेटर = (const TCPClientManager & amp;) {} साझा वेक्टर & lt; कनेक्शन * & gt; कनेक्शन; सार्वजनिक: TCPClientManager (); SharedVector & lt; & gt; :: आकार प्रकार प्रकार (); // यहां समस्या शून्य है addConnection (कॉन्स्ट क्लाइंट & amp;); शून्य तोड़ने कनेक्शन (इंट); शून्य हटाना कनेक्शन (इंट); शून्य लॉक (); शून्य अनलॉक (); ~ TCPClientManager (); }; टाइप नाम शेड वेक्टर & lt; & gt; :: आकार प्रकार TCPClientManager :: size () {return connections.size (); }  

मुझे मूल्य प्राप्त करने के प्रकार को घोषित करना होगा। कंपाइलर ने कहा कि टेम्पलेट के लिए यह बहुत ही कम तर्क था।

आपको साझा वेक्टर टेम्पलेट के लिए एक प्रकार तर्क प्रदान करना है:

  साझा वेक्टर & lt; कनेक्शन * & gt; :: आकार प्रकार प्रकार (); .... साझा किए गए वेक्टर & lt; कनेक्शन * & gt; :: SizeType TCPClientManager :: size () {return connections.size (); }  

क्योंकि यह कनेक्शन * प्रकार TCPClientManager में एक टेम्प्लेट पैरामीटर नहीं है, लेकिन एक स्पष्ट चुना गया प्रकार, आपको typename < / कोड> से पहले साझा वेक्टर & lt; कनेक्शन * & gt ;: SizeType


Comments