2016-03-31 14 views
7

मान लीजिए कि मेरे पास दो वर्ग Foo1<T> और Foo2<T> हैं।टेम्पलेट टेम्पलेट पैरामीटर घोषित कैसे करें

template<class T, class Y> std::vector<Foo1<T>> bar(std::vector<Y<T>>&)

दुख की बात है लेकिन संकलक <Y<T>> पसंद नहीं करता:

मैं तो एक समारोह bar कि एक std::vector<Foo1<T>> करने के लिए या के लिए एक संदर्भ लेता है बनाना चाहते हैं, एक std::vector<Foo2<T>> लेकिन हमेशाएक std::vector<Foo1<T>> रिटर्न बिट। इसके चारों ओर एक तरफ दो अधिभार प्रदान करना है, लेकिन क्या कोई तरीका है कि मैं उपरोक्त व्यवस्था कर सकता हूं, तो यह सही है?

उत्तर

17

आप template template parameter की जरूरत है:

template<class T, template <typename> class Y> 
std::vector<Foo1<T>> bar(std::vector<Y<T>>&) {} 
+0

धन्यवाद। आप एक परी है! –

+2

सी ++ 14 'वाई' से शुरू होने पर भी' कक्षा 'के बजाय' टाइपनाम 'के साथ घोषित किया जा सकता है। 'टी' पैरामीटर हमेशा इस प्रकार घोषित किया जा सकता है। भाषा में बस थोड़ा सा वाक्य रचनात्मक स्थिरता जोड़ा गया। – emsr

+0

@emsr मैं 'text' का उपयोग विशेष रूप से 'टेम्पलेट' ब्रैकेट के अंदर 'वर्ग' का उपयोग करना चाहता हूं, बस 'टाइपनाम टी :: प्रकार' संरचनाओं को खोजना आसान बनाने के लिए। – TemplateRex

संबंधित मुद्दे