2010-08-20 21 views
5

नीचे कोड में:टी का प्रकार क्या है?

template<typename T> 
struct X {}; 

int main() 
{ 
    X<int()> x; // what is the type of T ? 
} 

टी के प्रकार क्या है? मैंने boost स्रोतों में ऐसा कुछ देखा।

+0

मैं इस 'वाक्यविन्यास' का उपयोग करने के उद्देश्य से जानना चाहता हूं ('std :: function',' boost :: function' या 'boost :: function_traits' के साथ उपयोग किए जाने के अलावा) – Tomaka17

+0

लेकिन जब हम ' int x = int() ', अभिव्यक्ति' int() 'को मूल्य प्रारंभिक $ 8.5/7 के रूप में माना जाता है। तो यह मुश्किल है मुझे लगता है कि – Chubsdad

+0

@chub: एक प्रकार की अपेक्षा की जाती है, एक मूल्य नहीं। –

उत्तर

12

फ़ंक्शन int func() पर विचार करें। इसमें एक फ़ंक्शन प्रकार int(void) है। इसे स्पष्ट रूप से पॉइंटर प्रकार में परिवर्तित किया जा सकता है क्योंकि सी ++ मानक 4.3/1 में कहता है, लेकिन इस मामले में इस तरह के रूपांतरण में कोई आवश्यकता नहीं है, इसलिए T में फ़ंक्शन का प्रकार int(void) है, जो इसके लिए पॉइंटर नहीं है।

2

यहां मैंने जो किया है। हालांकि नीचे दिए गए कोड का आउटपुट कार्यान्वयन विशिष्ट है, कई बार यह उस प्रकार के टी में एक अच्छा संकेत देता है जिसके साथ हम काम कर रहे हैं।

template<typename T> 
struct X { 
    X(){ 
     cout << typeid(T).name(); 
    } 
}; 

int main() 
{ 
    X<int()> x; // what is the type of T ? 
    cout << typeid(int()).name() << endl; 
} 

कुलपति ++ पर उत्पादन

पूर्णांक __cdecl (शून्य)

पूर्णांक __cdecl (शून्य) है

0

T के प्रकार के एक समारोह है कि कोई पैरामीटर लेता है और int देता है, जैसा कि:

template<typename T> 
struct X {}; 

int foo() 
{ 
    return 42; 
} 
int main() 
{ 
    X<int()> x; // what is the type of T ? 
    typedef int(foo_ptr)(); 
    X<foo_ptr> x2; 
    return 0; 
} 

Tx और x2 एक ही प्रकार के हैं।

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