2010-11-14 5 views
8

क्या क्यू 4 ओ के साथ सी ++ में Q_OBSOLETE या Q_DEPRECATED है?Qt में अप्रचलित (बहिष्कृत) के रूप में कुछ कैसे चिह्नित करें?

या क्या कोई समान सी ++ मैक्रो या कीवर्ड है?

+0

क्या आप इस तरह के एक मैक्रो या कीवर्ड क्या करना चाहते हैं मिलना चाहिए? – bjoernz

+1

यदि कोई बहिष्कृत संरचना उपयोग में पाई जाती है तो चेतावनी जारी करने के लिए। बेहतर स्पष्टीकरण के लिए http://en.wikipedia.org/wiki/Deprecation देखें। –

उत्तर

-2

"बहिष्कृत संरचनाओं" द्वारा, आप वास्तव में "सदस्य कार्य को बहिष्कृत" कहते हैं। आप किसी भी बहिष्कृत फ़ंक्शन की कॉल साइट पर अपना ध्यान खींचने के लिए संकलन-समय चेतावनी मांग रहे हैं।

मानक सी ++ में किसी भी उचित तरीके से यह संभव नहीं है, और मुझे G ++ में कोई भी विशेषता दिखाई नहीं दे रही है जो इसका समर्थन करेगी। क्यूटी वास्तव में ऐसी सुविधा नहीं जोड़ सकता है अगर संकलक के पास पहले से कुछ समर्थन नहीं है।

हालांकि, माइक्रोसॉफ्ट विजुअल सी ++ __declspec(deprecated) एक्सटेंशन का समर्थन करता है, और मुझे लगता है कि जी ++ 4.5 के लिए एक कंपाइलर प्लगइन लिखना संभव है जो एक समान सुविधा जोड़ता है।

+0

ऐसा लगता है कि मैंने जी ++ में '__attribute __ ((बहिष्कृत)) छोड़ा था। –

0

आप अपने आप को समान कुछ करना चाहते हो सकता है:

#ifdef Q_TREAT_OBSOLETE_AS_ERRORS 
#define Q_OBSOLETE(X) \ 
     BOOST_STATIC_ASSERT(false); \ 
     X 

#else 
#define Q_OBSOLETE(X) X 
#endif 

इस निर्माण बस कोड के कुछ पदावनत कोड/भाग विकल्प अगर कोई Q_TREAT_OBSOLETE_AS_ERRORS परिभाषित किया गया है और नहीं तो संकलन-टाइम त्रुटि उत्पन्न करता है।

ध्यान दें कि BOOST_STATIC_ASSERT में कोई दायरा सीमा नहीं है, इसलिए Q_OBSOLETE मैक्रो है।

शायद यह आपकी समस्या का समाधान करने का सबसे अच्छा तरीका नहीं है और वास्तव में मुझे यकीन नहीं है कि यह उपयोगी है

आप कोड को @obsolete के रूप में चिह्नित कर सकते हैं या बस टिप्पणियों में इसे इंगित कर सकते हैं।

+0

यह काम नहीं करता है। इससे संकलित त्रुटियों का कारण बन जाएगा यदि बहिष्कृत कोड ** संकलित ** है, चाहे वह कोड कहीं और से कहा जाता है या नहीं। –

+0

@ केन वेल, यह स्पष्ट रूप से है कि आपके पास यह जांचने का कोई तरीका नहीं है कि कुछ कोड खंड वास्तव में कहलाए जा रहे हैं या नहीं। यह स्थैतिक दावा चीज बस बहिष्कृत सुविधाओं के संकलन पर ध्यान आकर्षित करने में मदद करता है। * असल में, यह सब Q_OBSOLETE सामान मेरे लिए बहुत अनावश्यक लगता है।* –

+0

वह पूछ रहा है (मुझे लगता है) क्योंकि वह जावा में उपयोग किया जाता है, जो कार्यों को अव्यवस्थित कर सकता है, और जब आप उनका उपयोग करने का प्रयास करते हैं तो आपको एक कंपाइलर चेतावनी देते हैं। –

1

बस

#warning 

निर्देश

का उपयोग हालांकि सी ++ नहीं है मानक काफी आप एक संकलक है कि यह (see this SO question) का समर्थन नहीं करता का सामना करेंगे संभावना नहीं है।

+0

विंडोज/एमएसवीसी क्यूटी के साथ काफी आम लक्ष्य है, इसलिए मुझे "काफी संभावना" से असहमत होना है। –

1
  1. वास्तविक कार्य को सार्वजनिक दायरे से बाहर खींचें।
  2. सार्वजनिक दायरे में एक ही नाम के साथ एक और फ़ंक्शन बनाएं।
  3. उस फ़ंक्शन में अपनी चेतावनी/असफल कोड डालें।
  4. मूल के साथ मूल को कॉल करें।
+2

इस तरह एक संकलन समय चेतावनी उत्सर्जित नहीं कर सकता। –

31

आप Q_DECL_DEPRECATED का उपयोग करते हैं आप परिणाम आप उदा .: लिए देख रहे हैं

Q_DECL_DEPRECATED void foo(); 
+6

यह स्वीकार्य उत्तर होना चाहिए। – dom0

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