2011-06-02 13 views
7

मुझे कुछ लिखना है, लेकिन मुझे यकीन है कि func<TheType*>() जैसे कुछ में गुजरने का एक मानक तरीका है और आपके कोड (शायद TheType :: SomeStaticCall) में उपयोग के लिए TheType निकालने के लिए टेम्पलेट जादू का उपयोग करना है।मैं टेम्पलेट में पॉइंटर से टाइप कैसे प्राप्त करूं?

पीआरआर पास होने पर उस प्रकार को प्राप्त करने के लिए मानक तरीका/कार्य क्या है?

+5

आपको प्रश्न स्पष्ट करने के लिए कुछ कोड जोड़ना चाहिए। आप क्या करना चाहते हैं, इनपुट क्या हैं? –

+0

@ डेविड: मेरे पास कुछ था लेकिन यह महसूस करने की निगरानी नहीं थी कि इसे एक टैग के रूप में फ़िल्टर किया गया था (और दिखाई नहीं दे रहा था)। क्या यह एटीएम के बाद से बना है? –

उत्तर

16

मुझे लगता है कि आप फ़ंक्शन में प्रकार तर्क से पॉइंटर-नेस को हटाना चाहते हैं।

template<typename T> 
struct remove_pointer 
{ 
    typedef T type; 
}; 

template<typename T> 
struct remove_pointer<T*> 
{ 
    typedef typename remove_pointer<T>::type type; 
}; 

C++ 0x में, remove_pointer<type_traits> हेडर फाइल में परिभाषित किया गया है: यदि ऐसा है, तो आप इसे इस तरह से कर सकते हैं,

template<typename T> 
void func() 
{ 
    typename remove_pointer<T>::type type; 
    //you can use `type` which is free from pointer-ness 

    //if T = int*, then type = int 
    //if T = int****, then type = int 
    //if T = vector<int>, then type = vector<int> 
    //if T = vector<int>*, then type = vector<int> 
    //if T = vector<int>**, then type = vector<int> 
    //that is, type is always free from pointer-ness 
} 

जहां remove_pointer के रूप में परिभाषित किया जाता है। लेकिन सी ++ 03 में, आपको इसे स्वयं परिभाषित करना होगा।

+0

तो st_ में remove_pointer नहीं है? यह वही है जो मैं चाहता था लेकिन मेरा आंत कहता है कि मैं कुछ उपयोग कर सकता हूं (लेकिन शायद नहीं?) –

+0

@ एसिडज़ॉम्बी 24: सी ++ 0x में, हां। सी ++ 03 में, संख्या – Nawaz

+0

डार्न, सी ++ 0x में यह क्या है? (हेडर और मुझे लगता है कि संरचना नाम अगर ऐसा नहीं है) मुझे लगता है कि मैं आधा सही था? –

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