मेरे पास कुछ फ़ंक्शन हैं जिन्हें एक साथ समूहीकृत किया जा सकता है, लेकिन कुछ ऑब्जेक्ट/इकाई से संबंधित नहीं हैं और इसलिए विधियों के रूप में नहीं माना जा सकता है।सी ++ नेमस्पेस और टेम्पलेट
तो, मूल रूप से इस स्थिति में मैं एक नया नामस्थान बनाउंगा और परिभाषा header
फ़ाइल में रखूंगा, cpp
फ़ाइल में कार्यान्वयन। इसके अलावा (यदि आवश्यक हो) मैं उस cpp
फ़ाइल में एक अनाम नामस्थान बनाउंगा और उन सभी अतिरिक्त कार्यों को रखूंगा जिन्हें मेरे नामस्थान इंटरफ़ेस में उजागर/शामिल नहीं किया जाना है।
नीचे कोड देखें (शायद नहीं सबसे अच्छा उदाहरण और एक अन्य कार्यक्रम वास्तुकला के साथ बेहतर किया जा सकता है, लेकिन मैं सिर्फ एक बेहतर नमूना नहीं सोच सकते हैं ...)
नमूना कोड (header
)
namespace algorithm {
void HandleCollision(Object* object1, Object* object2);
}
नमूना कोड (cpp
)
#include "header"
// Anonymous namespace that wraps
// routines that are used inside 'algorithm' methods
// but don't have to be exposed
namespace {
void RefractObject(Object* object1) {
// Do something with that object
// (...)
}
}
namespace algorithm {
void HandleCollision(Object* object1, Object* object2) {
if (...) RefractObject(object1);
}
}
अभी तक इतना अच्छा है। मुझे लगता है कि यह मेरे कोड को प्रबंधित करने का एक अच्छा तरीका है, लेकिन मुझे नहीं पता कि मुझे क्या करना चाहिए यदि मेरे पास कुछ टेम्पलेट-आधारित फ़ंक्शन हैं और मूल रूप से वही करना चाहते हैं।
यदि मैं टेम्पलेट का उपयोग कर रहा हूं, तो मुझे अपना सभी कोड header
फ़ाइल में रखना होगा। ठीक है, लेकिन फिर मुझे कुछ कार्यान्वयन विवरण कैसे छुपाएं?
मैं अपने इंटरफेस से RefractObject
समारोह को छिपाना चाहते हैं, लेकिन मैं बस अपने घोषणा (सिर्फ इसलिए कि मैं एक header
फ़ाइल में अपने सभी कोड है) केवल दृष्टिकोण मैं के साथ आया नहीं निकाल सकते ...
की तरह कुछ किया गया था:
नमूना कोड (header
)
namespace algorithm {
// Is still exposed as a part of interface!
namespace impl {
template <typename T>
void RefractObject(T* object1) {
// Do something with that object
// (...)
}
}
template <typename T, typename Y>
void HandleCollision(T* object1, Y* object2) {
impl::RefractObject(object1);
// Another stuff
}
}
कोई भी विचार कैसे कोड डिजाइन के मामले में इस बेहतर बनाने के लिए?
क्या सदस्य? इसके अलावा, फ्री-फ़ंक्शंस को वैसे भी पसंद किया जाता है। :) – GManNickG
ठीक है, मैंने कहा कि यह सिर्फ नमूना के लिए है। मेरे वास्तविक प्रोजेक्ट 'एल्गोरिदम' के मामले में सन्निकटन एल्गोरिदम और पथ-खोज एल्गोरिदम शामिल हैं, ताकि उन्हें उस शब्द के अर्थ में 'सदस्यों' बनाना असंभव हो ... –
सदस्य कार्य> इंटेलिजेंस के आविष्कार के बाद से मुक्त कार्य। – Puppy