इस मैक्रो को कंपाइलर कमांड लाइन पैरामीटर के रूप में कुछ वैश्विक हेडर या बेहतर में परिभाषित किया जा सकता है:
#define me (*this)
और कुछ उपयोग उदाहरण:
some_header.h:
inline void Update()
{
/* ... */
}
main.cpp:
#include "some_header.h"
class A {
public:
void SetX(int x)
{
me.x = x;
me.Update();
}
void SomeOtherFunction()
{
::Update();
}
/*
100 or more lines
...
*/
void Update()
{
// ...
}
int x;
};
इसलिए कक्षा विधि में जब मैं एक कक्षा सदस्य का उपयोग करता हूं, तो मैं हमेशा उपयोग करता हूं me
, और वैश्विक पहचानकर्ता का उपयोग करते समय मैं हमेशा उपयोग करता हूं ::
। यह पाठक को कोड के साथ परिचित नहीं है (शायद कुछ महीनों के बाद खुद को) जो कुछ और देखने की आवश्यकता के बिना पहुँचा है की स्थानीय जानकारी। मैं परिभाषित करना चाहता हूं me
क्योंकि मैं this->
हर जगह शोर और बदसूरत का उपयोग करता हूं । लेकिन #define me (*this)
एक अच्छा C ++ अभ्यास माना जा सकता है? क्या me
मैक्रो के साथ कुछ व्यावहारिक समस्याग्रस्त बिंदु हैं ? और यदि आप C ++ प्रोग्रामर के रूप में me
मैक्रो का उपयोग करते हुए कुछ कोड के पाठक होंगे, तो आप इसे पसंद करेंगे या नहीं?
संपादित करें: क्योंकि कई लोग तर्क का उपयोग करते हुए विशिष्ट गर्भनिरोधक नहीं करते हैं me
, लेकिन सामान्य रूप से होने वाले संक्रमण ने इसे स्पष्ट कर दिया है। मुझे लगता है कि यह स्पष्ट नहीं हो सकता है कि "हर जगह यह स्पष्ट" के क्या लाभ हैं।
"हर जगह यह स्पष्ट" के क्या लाभ हैं?
- कोड के एक पाठक के रूप में आपके पास निश्चित है कि क्या एक्सेस किया गया है और आप सत्यापित करने की तुलना में अलग-अलग चीजों पर ध्यान केंद्रित कर सकते हैं - कुछ दूर के कोड में - जो आपको लगता है कि वास्तव में एक्सेस किया गया है।
- आप विशेष रूप से खोज फ़ंक्शन का उपयोग कर सकते हैं। खोज "
this->x
" आपको केवल खोज से अधिक वांछित परिणाम दे सकता है "x
" - जब आप किसी सदस्य को हटा रहे हैं या उसका नाम बदल रहे हैं, तो संकलक आपको उन स्थानों पर मज़बूती से सूचित करता है जहाँ इस सदस्य का उपयोग किया जाता है। (कुछ वैश्विक फ़ंक्शन में एक ही नाम हो सकता है और मौजूद मौका आपको त्रुटि का परिचय दे सकता है यदि आप इसे स्पष्ट उपयोग नहीं कर रहे हैं)।
- जब आप कोड को पुन: सक्रिय कर रहे हैं और सदस्य से गैर-सदस्यीय कार्य कर रहे हैं (बेहतर एन्कैप्सुलेशन बनाने के लिए) तो यह स्पष्ट रूप से आपको दिखाता है कि आपको कौन सा स्थान संपादित करना चाहिए और आप इसे गैर-सदस्य फ़ंक्शन पैरामीटर के रूप में दिए गए वर्ग के उदाहरण के लिए सूचक के साथ आसानी से बदल सकते हैं
- आम तौर पर जब आप कोड बदल रहे होते हैं, तो त्रुटियों के लिए और अधिक जिम्मेदारियाँ होती हैं जब आप स्पष्ट रूप से इसका उपयोग नहीं कर रहे होते हैं जब आप हर जगह स्पष्ट उपयोग कर रहे होते हैं।
- स्पष्ट करें कि यह स्पष्ट this m_ की तुलना में कम शोर है "जब आप बाहर से सदस्य (
object.member
बनामobject.m_member
) को स्वीकार कर रहे हैं (इस बिंदु को प्राप्त करने के लिए @Kaz के लिए धन्यवाद) - स्पष्ट करें कि यह समस्या सभी सदस्यों - विशेषताओं और विधियों के लिए सार्वभौमिक रूप से हल करती है, जबकि “m_” या अन्य उपसर्ग केवल विशेषताओं के लिए व्यावहारिक रूप से प्रयोग करने योग्य है।
मैं इस सूची को चमकाना और बढ़ाना चाहूंगा, मुझे बताएं कि क्या आप अन्य लाभों के बारे में जानते हैं और हर जगह स्पष्ट रूप से इस मामले का उपयोग करते हैं ।
#define self (*this)
? तुम भी दोनों मैक्रोज़ मिश्रण कर सकते हैं और कुछ फाइलें VB और अन्य पायथन नकल कर रहे हैं। :)
me_x
।