अंगूठे के नियम के रूप में "इसे यथासंभव स्थानीय रखने की कोशिश करें लेकिन आवश्यकतानुसार दिखाई दें"।
यदि फ़ंक्शन को कॉल करने वाले सभी कोड एक ही कार्यान्वयन फ़ाइल में रहते हैं, तो इसका अर्थ यह है कि इसे कार्यान्वयन फ़ाइल में स्थानीय रखें।
यदि आप इसे अपनी कक्षा का एक निजी स्थैतिक तरीका बनाते हैं, तो यह आपके वर्ग सहित कार्यान्वयन द्वारा कॉल करने योग्य नहीं होगा, लेकिन यह अभी भी उनके लिए दृश्यमान होगा।इसलिए हर बार जब आप उस विधि के अर्थशास्त्र को बदलते हैं, तो आपके कॉल सहित सभी कार्यान्वयनों को पुन: संकलित करना होगा - जो कि काफी बोझ है, क्योंकि उनके दृष्टिकोण से, उन्हें उन सिमेंटिक्स को जानने की भी आवश्यकता नहीं है।
इस प्रकार, अनावश्यक निर्भरताओं को कम करने के लिए, आप इसे एक स्थिर वैश्विक कार्य करना चाहते हैं।
हालांकि, अगर आपको कभी भी इस वैश्विक फ़ंक्शन को मल्टीप्ल कार्यान्वयन फ़ाइलों में दोहराया जाना चाहिए, तो यह फ़ंक्शन को एक अलग शीर्षलेख/कार्यान्वयन फ़ाइल जोड़ी में स्थानांतरित करने का समय होगा, ताकि सभी कॉलर इसे शामिल कर सकें।
चाहे आप उस कार्य को नामस्थान में, वैश्विक दायरे में रखते हैं, या एक वर्ग में स्थिर कार्य वास्तव में स्वाद के लिए है।
अंतिम नोट पर, यदि आप वैश्विक स्थैतिक फ़ंक्शन के लिए जाते हैं, तो "अधिक सी ++ जैसे" संस्करण होता है: अनाम नामस्थान। इसमें अच्छी संपत्ति है कि यह वास्तव में राज्य को स्टोर कर सकती है और उपयोगकर्ताओं को अपने किसी भी कार्य को घोषित करने में सक्षम होने के लिए रोकती है।
// in your .cpp file
namespace /*anonymous*/
{
void foo()
{
// your code here
}
};
void MyClass::FooUser1() { foo(); }
void MyClass::FooUser2() { foo(); }
स्रोत
2009-06-26 11:27:39
सिर्फ इसलिए कि कोड का यह भाग दो बार प्रकट होता है, इसका मतलब यह नहीं है कि आपको इसे स्वयं ही एक विधि बनाना है। आप क्या हासिल करना चाहते हैं? –
साझापर्ट() में आप क्या करते हैं यदि यह न तो किसी वस्तु की स्थिति पर निर्भर करता है और न ही बदलता है? – Tobias
@ammoQ: क्या आप दोनों जगहों पर कोड डुप्लिकेट करने का सुझाव दे रहे हैं। यह एक भयानक विचार है। –