2010-06-08 12 views
15

मुझे इस तरह एक टाइपपीफ करने की आवश्यकता है।आंशिक टेम्पलेट्स के लिए सी ++ टाइपपीफ

template< class A, class B, class C > 
class X 
{ 
}; 

template< class B, class C > 
typedef X< std::vector<B>, B, C > Y; 

मुझे पता चला कि यह C++ में समर्थित नहीं है। क्या कोई मुझे सलाह दे सकता है कि वैकल्पिक माध्यमों के माध्यम से इसे कैसे प्राप्त किया जाए?

धन्यवाद, गोकुल।

+1

के संभावित डुप्लिकेट (http [टेम्प्लेट की typedef?]: // stackoverflow .com/प्रश्न/64 9 718/templated-typedef) – Troubadour

उत्तर

18

आप एक सी ++ है, तो 0x/C++ 1x संकलक, कि एक अलग वाक्य रचना के साथ अनुमति दी जाएगी (ऐसा लगता है मानो compilers अभी भी इस सुविधा का समर्थन नहीं करते):

template <typename B, typename C> 
using Y = X< std::vector<B>, B, C >; 

आप (जैसे पीटर पता चलता है) एक टेम्प्लेटेड struct में एक संलग्न प्रकार को परिभाषित करने, या विरासत कोस की तरह, अन्य तकनीकों का उपयोग कर सकते हैं (यदि संभव हो तो बचने के लिए):

template <typename B, typename C> 
class Y : public X< std::vector<B>, B, C > {}; 
+1

यह मुझे आश्चर्यचकित करता है हालांकि * क्यों * यह अभी तक समर्थित नहीं है। क्या यह अर्थशास्त्र, 'ऑटो' टाइपिंग, वैरिएडिक टेम्पलेट्स या कुछ अन्य सामानों को स्थानांतरित करने से बहुत कठिन है जो कम से कम लागू करना मुश्किल लगता है? लेकिन मुझे कंपाइलर बनाने में ज्यादा अनुभव नहीं है, मेरी अंतर्ज्ञान कि कितनी मुश्किल चीजें * रास्ता * बंद हो सकती हैं :)। – Pieter

+2

मुझे लगता है कि मानक के विभिन्न हिस्सों को अलग-अलग समय पर तय किया गया था - कंपाइलर निर्माताओं को उचित रूप से आत्मविश्वास होना चाहिए कि 2011 में अंतिम मानक आने से पहले एक मानक बदल जाएगा इससे पहले कि वे इसे विकसित करने में समय व्यतीत करें - और फिर तय करें कि यह कैसे फिट बैठता है उनके रिलीज कार्यक्रमों के लिए। – AshleysBrain

+0

मैं भविष्य का एक व्यक्ति हूं। ऐसा लगता है कि अब प्रमुख कंपेलरों में समर्थित है। – imallett

15

इसे एक संरचना में रखकर। इस विचार को टेम्पलेट उपनाम कहा जाता है और सी ++ 0x मानक (the proposal) का हिस्सा है। लेकिन एक काम के आसपास द्वारा दिया जाता है:

template<class B, class C> 
struct Y { 
    typedef X<std::vector<B>, B, C> type; 
}; 

और अपने इच्छित प्रकार के रूप में Y<B, C>::type का उपयोग करें।

और आप सोच सकते हैं कि gcc4.5 या VS2010 पहले से ही इसका समर्थन कर सकता है, जैसा कि सी ++ 0x के बड़े उप-समूह के मामले में है, लेकिन मुझे आपको निराश करना है, जैसा कि हम अभी भी असमर्थित हैं:)।

+2

ध्यान दें कि इसके उपयोग की आवश्यकता हो सकती है 'टाइपनाम' कीवर्ड का 'बी' या 'सी 'स्वयं टेम्पलेट पैरामीटर हैं। –

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