2012-05-24 5 views
6

मुझे लगता है कि निम्नलिखित कुछ सी ++ कोड का सामना करना पड़ा?क्या एक टाइपिफ़ स्वयं का कोई प्रभाव पड़ता है?</p> <pre><code>typedef Request Request; </code></pre> <p>यह सिर्फ एक नहीं-op है या है एक प्रभाव वास्तविक typedef इस करता है, और यदि हां, तो क्या प्रभाव यह है:

+2

उसी नामस्थान में 'अनुरोध' परिभाषित किया गया था? –

+1

अगर अनुरोध 'मैक्रो' था तो यह कुछ कर सकता था। – Mankarse

+2

क्या आप वाकई 'typedef struct अनुरोध अनुरोध 'नहीं थे? –

उत्तर

9

पहचान टाइपपीफ की अनुमति है यदि नाम पहले से ही किसी प्रकार से संदर्भित है।

यह कानूनी है:

typedef int Request; 
typedef Request Request; // Redefines "Request" with no effect 

यह नहीं है:

typedef Request Request; // Illegal, first "Request" doesn't name a type. 

मानक इस से संबंधित एक विशिष्ट उदाहरण है। सी ++ 2003, §7.1.3/2:

किसी दिए गए गैर-वर्ग दायरे में, एक typedef विनिर्देशक किसी भी प्रकार में घोषणा की कि गुंजाइश के लिए प्रकार का उल्लेख करने के नाम पर फिर से परिभाषित करने के लिए इस्तेमाल किया जा सकता है जो पहले से ही संदर्भित करता है। [उदाहरण:

typedef struct s { /* ... */ } s; 
typedef int I; 
typedef int I; 
typedef I I; 

- अंत उदाहरण]

+0

उनके बीच क्या अंतर है? आपकी पोस्ट पर्याप्त स्पष्ट नहीं है, क्योंकि मैं एक ही टाइपपीफ को दो बार देखता हूं, फिर भी उनमें से एक कानूनी है, अन्य नहीं है। – Nawaz

+0

मेरे पहले ब्लॉक और मेरे दूसरे ब्लॉक के बीच का अंतर "अनुरोध" की पूर्व परिभाषा है। –

0

तोRequest केवल एक पैरामीटर यह एक opaque pointer हो रहा है के रूप में पारित कर दिया है।
वहाँ एक

typedef struct Request Request 

कोड में कहीं होना चाहिए। (अपने प्रश्न पर टिप्पणियां देखें)
इसका उपयोग एपीआई को परिभाषित करने और कार्यान्वयन के विवरण छिपाने के लिए किया जाता है। तो आप बाद में एपीआई को बदले बिना कार्यान्वयन को बदल सकते हैं।

क्लाइंट को acutal प्रकार के बारे में कुछ भी जानने की आवश्यकता नहीं है - यह सिर्फ एक हैंडल है।
आप जो कुछ भी करना चाहते हैं उसे एपीआई विधियों (सृजन, हटाएं, लोड, init, ...)
आमतौर पर हैंडल Request एपीआई के कार्यान्वयन में कुछ और अर्थपूर्ण में डाला जाएगा। यह आमतौर पर पुराना सी

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