2012-04-13 21 views
6

मैं निम्नलिखित उदाहरण में सदस्य फ़ंक्शन का रिटर्न प्रकार कैसे प्राप्त कर सकता हूं?सदस्य कार्यों के लिए decltype

template <typename Getter> 
class MyClass { 
    typedef decltype(mygetter.get()) gotten_t; 
... 
}; 

समस्या यह है कि मेरे पास MyClass को परिभाषित करते समय "mygetter" ऑब्जेक्ट नहीं है।

मैं जो करने की कोशिश कर रहा हूं वह है: मैं एक कैश बना रहा हूं जिसका उपयोग कर सकते हैं, क्योंकि यह कुंजी है, जो भी गेटटर द्वारा लौटाया जाता है।

उत्तर

11

मुझे यकीन नहीं है कि आप क्या चाहते हैं, लेकिन ऐसा लगता है कि mygetterGetter प्रकार का कोई भी ऑब्जेक्ट होना चाहिए। std::declval का उपयोग करें और कुछ भी बिना इस तरह के एक वस्तु प्राप्त करने के लिए (आप केवल प्रकार कटौती के लिए उपयोग कर सकते हैं)

typedef decltype(std::declval<Getter>().get()) gotten_t; 
+0

ओह हे, मैं कभी उस के बारे में पता था। वह तो कमाल है! मैं हमेशा 'गेटटर() प्राप्त करता हूं (प्राप्त करें) (और' माना जाता है कि 'गेटटर' डिफ़ॉल्ट रूप से रचनात्मक था। –

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