Friday, 15 July 2011

c++ - How to specify that template parameter is a class template, and infer its template type from another template parameter? -


एक टेम्पलेट फ़ंक्शन पर विचार करें:

  टेम्पलेट & 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