कई मामलों में मुझे अपने वर्गों को अपनी कार्यक्षमता को तोड़ने और कोड का पुन: उपयोग करने के लिए निजी कार्यों की आवश्यकता होती है। ठेठ कार्यान्वयन होगा:क्या केवल .cpp में स्थिर विधि घोषित/परिभाषित करना ठीक है?
MyClass.h
#include "AnotherClass.h"
class MyClass {
public:
float foo() const;
private:
float fooPrivate(const AnotherClass& ac) const;
}
MyClass.cpp
#include "MyClass.h"
float MyClass::foo() const {
return fooPrivate(AnotherClass());
}
float MyClass::fooPrivate(const AnotherClass& ac) const {
return ac.foo();
}
यह ठीक है, लेकिन हेडर फाइल में fooPrivate() की घोषणा निम्नलिखित मामलों में समस्या हो सकती है :
हम हेडर फ़ाइल में अन्य क्लास को शामिल नहीं करना चाहते हैं अगर यह केवल आंतरिक उपयोग के लिए और MyClass के बाहर की आवश्यकता नहीं है।
यदि कई निजी कार्यों की आवश्यकता है तो हम हेडर फ़ाइल को अनावश्यक निजी कार्यों के साथ प्रदूषित करने का जोखिम उठाते हैं जो कोड को कम स्पष्ट करते हैं, संकलन समय बढ़ाते हैं और बनाए रखना अधिक कठिन होता है।
मैं Pimpl मुहावरा है कि इन सभी समस्याओं को हल करती है के बारे में पता कर रहा हूँ, लेकिन मेरे सवाल यह है कि अगर हम Pimpl उपयोग करने के लिए कुछ कार्यों के लिए इस तरह कुछ करने के लिए यह ठीक है नहीं करना चाहते?
MyClass.h
class MyClass {
public:
float foo() const;
}
MyClass.cpp
#include "MyClass.h"
#include "AnotherClass.h"
static float fooPrivate(const AnotherClass& ac) {
return ac.foo();
}
float MyClass::foo() const {
return fooPrivate(AnotherClass());
}
इस मामले में यह MyClass.h और fooPrivate() में AnotherClass.h शामिल करने के लिए की जरूरत नहीं है किसी के द्वारा नहीं कहा जा सकता MyClass.cpp के अंदर और इसे घोषित करने के बाद छोड़कर। क्या मैं सही हू?
क्या इसका उपयोग कर कोई चेतावनी है या जब मैं अपना प्रोग्राम बड़ा हो जाता हूं तो क्या समस्याएं खत्म हो जाती हैं?
ऐसा लगता है कि आपका निजी सदस्य कार्य 'fooPrivate' पहले स्थान पर स्थिर हो सकता था। अन्यथा, आपका दूसरा दृष्टिकोण इतना अच्छा काम नहीं करेगा। –
आप जानते हैं, हेडर के लिए 'अन्य क्लास' के लिए एक अग्रेषित घोषणा पर्याप्त है। वह हल्का हल्का है। – Deduplicator
मैं आपको समझता हूं। हालांकि बिंदु एक ही रहता है। यहां तक कि अगर fooPrivate() MyClass के कुछ सदस्यों का उपयोग करता है (जो इसे गैर स्थैतिक बना देगा), ऐसे कई मामले हैं जहां कुछ सामग्री करने के लिए स्थिर फ़ंक्शन का उपयोग किया जा सकता है और फिर इस कॉल को संशोधित करने के लिए स्थिर कॉल के परिणाम का उपयोग किया जा सकता है । –