एक टेम्पलेट फ़ंक्शन पर विचार करें:
टेम्पलेट & amp; typ; आउटपुट कंटनेर टाइप करें typename, typename ContainerType & gt; स्थैतिक आउटपुट कंटैनेरप्रकार प्रक्रिया कंटेनर (कंटेनर टाइप c) {OutputContainerType परिणाम; ... वापसी परिणाम; }
मैं इसे ऐसा कोई समस्या नहीं कह सकता:
std :: vector & lt; MyClass & gt; v; Const ऑटो परिणाम = प्रोसेसर कंटेनर & lt; std :: सेट & lt; MyClass & gt; & gt; (वी);
हालांकि, मुझे पता है कि फ़ंक्शन विभिन्न कंटेनरों को स्वीकार और उत्पादन करेगा, लेकिन हमेशा एक ही तत्व प्रकार के साथ। इसलिए std :: set & lt; MyClass & gt; & gt;
निर्दिष्ट करना है बेमानी है; मैं processContainer & lt; std :: set & gt; (v)
टाइप करना चाहता हूं और इस तरह के कार्य प्रकार को decltype (v) :: value_type
के रूप में अनुमानित करना है। मैं उसे कैसे कर सकता हूँ? मैंने
टेम्पलेट & lt; टेम्पलेट & lt; & gt; क्लास आउटपुट कंटनेर टाइप, क्लास कंटेनर टाइप & gt; स्थिर आउटपुट कंटनेर टाइप & lt; typename कंटेनर टाईप :: मूल्य_टाइप & gt; प्रक्रिया कंटेनर (कंटेनर टाइप c) {}
लेकिन यह कोई बात नहीं संकलित करने के लिए प्राप्त नहीं कर सकता है (सी + + टेम्पलेट सिंटैक्स की मेरी समझ और ट्रिक्स बहुत गहरी नहीं हैं, जैसा कि आप देख सकते हैं)। < / P>
यदि आप आवंटक के बारे में परवाह नहीं करते हैं, तो आप इसे छोड़ सकते हैं:
टेम्पलेट & lt; टेम्पलेट & lt; typename ... & gt; क्लास आउटपुट कंटनेर टाइप, टेम्पलेट & lt; typename ... & gt; क्लास कंटेनर टाइप, टाइपनामनाम ValueType & gt; स्थिर आउटपुट कंटनेर टाइप & lt; मान प्रकार & gt; प्रोसेसर कंटेनर (कंटेनर टाइप & लेफ्टिनेंट; वैल्यू टाइप & gt; सी) {आउटपुट कंटनेर टाइप & lt; मान प्रकार & gt; परिणाम; // ... रिटर्न परिणाम; } Int main () {std :: सेट & lt; int & gt; S {1, 2, 3}; ऑटो v = प्रोसेस कंटेनर & lt; std :: vector, std :: सेट, int & gt; (एस); }
No comments:
Post a Comment