2011-04-02 39 views
14

ऐसे फू के रूप में एक वर्ग के साथ:C++ 0x decltype और गुंजाइश संकल्प ऑपरेटर

struct Foo { static const int i = 9; }; 

मुझे लगता है कि जीसीसी 4.5 अस्वीकार कर देंगे निम्नलिखित

Foo f; 
int x = decltype(f)::i; 

अगर मैं एक का उपयोग यह काम करेंगे इंटरमीडिएट टाइपपीफ, जैसे:

typedef decltype(f) ftype; 
int x = ftype::i; 

लेकिन मैं नेमस्पेस को साफ रखना पसंद करता हूं। मैंने सोचा कि प्राथमिकता एक मुद्दा हो सकता है, इसलिए मैंने भी ब्रांड्स की कोशिश की है, लेकिन कोई भाग्य नहीं है। क्या यह प्रस्तुत करना असंभव है, या सिंटैक्स का एक टुकड़ा है जो मेरी मदद कर सकता है?

उत्तर

13

यह decltype(f)::i कहने के लिए मान्य सी ++ 0x है। जीसीसी अभी तक इसका समर्थन नहीं करता है। आप एक पहचान टेम्पलेट

template<typename T> struct identity { typedef T type; }; 
int x = identity<decltype(f)>::type::i; 

identityboost::mpl नाम स्थान का हिस्सा है के साथ काम कर सकते हैं।

+0

विजुअल स्टूडियो 2010 इस समस्या से भी पीड़ित है। अच्छा कामकाज –

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