आपका प्रश्न दो में विभाजित किया जा सकता है:
1. "मैं वैश्विक कार्यों कैसे छिपा कर सकते हैं"
है कि, नहीं हेडर फाइल में समारोह के शीर्षक डाल करने के लिए क्या करने के लिए एक आसान तरीका:
//============================
// Filename: "mylibrary.hpp"
//============================
// Description:
// Utility functions.
//============================
#ifndef MYLIBRARY_H_INCLUDED
#define MYLIBRARY_H_INCLUDED
//============================
namespace MyLibrary
{
void DoSomething();
} // namespace MyLibrary
//============================
#endif // MYLIBRARY_H_INCLUDED
//============================
पूर्ण कोड फ़ाइल:
//============================
// Filename: "mylibrary.cpp"
//============================
// Description:
// Utility functions.
//============================
// self header include
#include "mylibrary.hpp"
//============================
namespace MyLibrary
{
void DoSomethingBefore()
{
// ...
}
void DoSomethingAfter()
{
// ...
}
void DoSomethingConfirmed()
{
// ...
}
void DoSomething()
{
DoSomethingBefore();
DoSomethingConfirmed();
DoSomethingAfter();
}
} // namespace MyLibrary
//============================
#endif // MYLIBRARY_H_INCLUDED
//============================
जब यह संकलित किया गया है , आपको "mylibrary.o" या "mylibrary.obj" फ़ाइल मिलती है। आप इसे अन्य डेवलपर्स के रूप में प्रदान कर सकते हैं: "mylibrary.hpp" प्लस "mylibrary.obj", लेकिन, "mylibrary.cpp" फ़ाइल के बिना। अधिकांश "सादा सी"/"सी ++" कंपाइलर्स इस तरह से काम कर सकते हैं।
अन्य तरीके हैं, अगले खंड को पढ़ें।
2. "अज्ञात नामस्थान, वैश्विक कार्यों को छिपाने के लिए एक अच्छी तकनीक है?"
"बेनामी नेमस्पेस" तकनीक, वैश्विक कार्यों को छिपाने का एक और तरीका है।
Unnamed/anonymous namespaces vs. static functions
लेकिन, व्यक्तिगत रूप से, मैं इस तकनीक की सलाह नहीं देते, "पसंदीदा" जवाब के रूप में:
पर एक समान सवाल ही नहीं है।
नेमस्पेस उन चीजों में से एक हैं, जिन्हें मैं "शुद्ध सी" या "सी ++" की शुरुआत के बाद से अस्तित्व में रखना चाहता हूं। लेकिन, "अनाम नामस्थान" या "अनाम नामस्थान", उपयोग करने के लिए अजीब लगता है।
ऐसा कुछ छिपाने की कोशिश करना पसंद है, और बाद में, भूल जाओ, आप इसे कहां स्टोर करते हैं।
3 अतिरिक्त सुझाव
(क) मैं एक ही मुख्य आवश्यक, वैकल्पिक नहीं, गैर-अनाम फ़ाइल प्रति नाम स्थान का उपयोग करने के सुझाव देते हैं। इसमें घोंसला, अतिरिक्त आंतरिक नामस्थान हो सकते हैं। प्रत्येक मुख्य नामस्थान, एक ही आईडी होना चाहिए। फ़ाइल नाम के रूप में, लेकिन, फ़ाइल एक्सटेंशन या फ़ाइल प्रत्यय के बिना।
(बी) अनाम नामस्थान से बचें। यह एक सूचकांक के बिना, एक गोदाम में चीजें भंडार की तरह है।
(सी) अपने हेडर फ़ाइलों में फ़ाइल एक्सटेंशन, या फ़ाइल उपसर्ग का उपयोग करें, शायद ".h", या ".hpp", भले ही यह एक सी ++ फ़ाइल हो। मानक कहता है कि C++ को "C++" फ़ाइलों पर फ़ाइल एक्सटेंशन या फ़ाइल प्रत्यय का उपयोग नहीं करना चाहिए, लेकिन फाइल सिस्टम को पहचानना या ढूंढना मुश्किल है।
गुड लक।
क्यों न केवल उन्हें 'स्थिर' बनाते हैं? (एक स्थिर सी फ़ंक्शन में, स्थिर वर्ग विधि नहीं) –
@JamesMcLaughlin: उस उद्देश्य के लिए सी ++ 03 'स्थिर' में अच्छी तरह से बहिष्कृत किया गया था। हालांकि, सी ++ 11 इसे अनदेखा करता है। लेकिन 'स्थिर' और अनाम नामस्थान में होने का मतलब अलग-अलग चीजें हैं। 'स्थैतिक 'इसे आंतरिक जुड़ाव देगा, इसलिए फ़ंक्शन का उपयोग कुछ उद्देश्यों के लिए नहीं किया जा सकता है। –
आपके सुझावों के लिए धन्यवाद। क्या इनमें से कोई भी समाधान, स्थैतिक या अप्रयुक्त नामस्थान, अनुशंसित या पसंदीदा है? – user1192880