2010-07-08 23 views
6

निर्धारित करता है कि मैं सदस्य जेनेरिक फ़ंक्शन का रिटर्न प्रकार निर्धारित करने के बारे में कैसे जा सकता हूं?सी ++ टेम्पलेट फ़ंक्शन रिटर्न प्रकार

template<class E> 
    struct result<E> { 
     // E has member function data(), I need to know its return type 
     typedef typename &E::data type; 
    }; 

क्या यह सामान्य तरीके से करना संभव है? मुझे पता है कि boost:: result_of है लेकिन मेरे उद्देश्यों के लिए इसमें विशेषज्ञताएं नहीं हैं (यदि मैं सही ढंग से समझ गया, तो वापसी का प्रकार विशेष होना चाहिए)। बढ़ावा कार्यान्वयन बहुत अच्छा होगा।

+2

शायद, आपको उस जादू की बिल्कुल आवश्यकता नहीं है। 'E :: value_type *' या 'E :: सूचक 'का उपयोग करने का प्रयास करें। यदि इसमें 'डेटा()' है, तो यह एक कंटेनर होने की संभावना है और सार्वजनिक टाइपिफ़ी प्रदान करता है। –

+0

@ जोहान्स धन्यवाद। वास्तव में ublas और अन्य चीजों के साथ पारदर्शी रूप से काम करने के लिए रैपर लिखने की कोशिश कर रहा था। दुर्भाग्यवश ublas डेटा() इंटरफ़ेस थोड़ा सा मानक (array_type) है इसलिए मैंने इसे अलग से विशेषज्ञता समाप्त कर दिया। – Anycorn

उत्तर

4

जीसीसी का गैर मानक typeof ऑपरेटर ऐसा कर सकता है, जैसा कि Boost.TypeOf कर सकता है।

+0

जो काम करता प्रतीत होता है, बशर्ते कोई अधिभारित कार्य न हो। क्या आप जानते हैं कि 2 फ़ंक्शंस (एक कॉन्स क्वालीफायर) है, तो – Anycorn

+0

आपको इसे उपयोग करने से पहले कॉन्स या गैर कॉन्स प्रकार में फ़ंक्शन टाइप करना होगा। बूस्ट :: बाइंड के साथ आपको एक ही समस्या मिलती है। – bradgonesurfing

+0

@brad धन्यवाद। मुझे कास्ट टाइप करने से पहले वापसी प्रकार जानने की ज़रूरत नहीं है? क्या आप एक उदाहरण दे सकते हैं? – Anycorn

3

यदि आप कम से कम वीएस -2010 या जीसीसी 4.3 का उपयोग कर रहे हैं तो आप सी ++ 0x नए कीवर्ड decltype का उपयोग कर सकते हैं।

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