2011-02-14 19 views
7

मेरे पास कुछ टाइपडिफ हैं जिन्हें मैं बहिष्कृत करना चाहता हूं। मैं कोड के साथ पिछड़ा संगतता बरकरार रखने के लिए ऐसा कर रहा हूं जो पहले से मौजूद है। क्या इसका कोई सुरुचिपूर्ण (या शायद इतना सुरुचिपूर्ण) समाधान नहीं है? मैं इसे प्लेटफ़ॉर्म स्वतंत्र बनाना चाहता हूं लेकिन यदि कोई दृश्य स्टूडियो केवल समाधान है, तो वह भी करेगा।बहिष्कृत Typedef

+4

कोई पोर्टेबल समाधान नहीं है। @ नवाज ने माइक्रोसॉफ्ट एक्सटेंशन दिया। जीसीसी समतुल्य 'typedef int myint __attribute __ ((बहिष्कृत) है;'। – aschepler

उत्तर

11

MSVC++ में, आप typedef इस तरह का बहिष्कार कर सकते हैं:

typedef __declspec(deprecated) int myint; 

MSVC++ संकलक चेतावनी देता है कि myint बहिष्कृत है उत्पन्न होगा!

और अगर आप संकलक एक विशेष संदेश उत्पन्न करने के लिए जब एक पदावनत typedef संकलन चाहते हैं, तो ऐसा करते हैं: एक बंद आसान कोड में परिवर्तन की अनुमति है

typedef __declspec(deprecated("myint is deprecated, so most likely in the next version this myint will be missing")) int myint; 
+0

क्या करें? मुझे लगता है कि आप अंतिम भाग से चूक गए :)) – lurscher

+1

आपको शायद अंतिम कोष्ठक बंद करने की आवश्यकता है। ओटी: http://xkcd.com/859/ – KitsuneYMG

+0

@ किट्स्यूनवाईएमजी: हां। वह एक टाइपो था। धन्यवाद! – Nawaz

4

अगर आप सिर्फ एक deprecated में typedef को स्थानांतरित कर सकता है नामस्थान को टाइप किए गए बिंदुओं पर using namespace deprecated के उपयोग की आवश्यकता होती है।

हैं कि एक विकल्प यह एक टेम्पलेट है कि, जब instantiated, एक चेतावनी उत्पन्न होगा गढ़ना संभव हो सकता है नहीं है, लेकिन मैं नहीं जानता कि कैसे इस तरह के एक चेतावनी बेतकल्लुफ़ उत्पन्न करने के लिए:

template <class T> 
class TypedefHolder; 

template <> 
class TypedefHolder<int> 
{ 
    typedef int WhateverType; 
    // Something that induces a compile warning. 
}; 

तो बजाय:

typedef int WhateverType; 

यह हो जाता है:

typedef TypedefHolder<int>::WhateverType WhateverType; 
+0

मुझे लगता है कि अगर मैं कंपाइलर चेतावनियां उत्पन्न कर सकता हूं तो यह एक बहुत अच्छा समाधान है। कस्टम चेतावनियों पर किसी के पास कोई विचार है? – Samaursa

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