मैं boost::swap
के बराबर बनाना चाहता हूं और अपने पर्यावरण में, मानक शीर्षलेख शामिल कर सकते हैं या शामिल नहीं किए जा सकते हैं। परियोजना लाइसेंसिंग और अन्य सामान के आधार पर।
मैं गार्ड डिटेक्टरों द्वारा संरक्षित कोड के भाग बनाना चाहता हूं:क्या पोर्टेबल का पता लगाने का कोई तरीका है कि मैक्रोज़ का उपयोग करके मानक हेडर शामिल किया गया है?
चलिए एक संकलन इकाई पर विचार करें।
परियोजना विशिष्ट, आगे लिखा संभावित शामिल हैं:
#include <algorithm> // (or <utility> for C++11 projects)
परियोजना कोड में बाद में मेरे स्वैप उपयोगिता हैडर से शामिल हैं:
namespace MyCompany
{
template<class T1, class T2>
void swap(T1& left, T2& right)
{
#ifdef _ALGORITHM_ // you get the idea.
std::swap(left, right);
#else
// fallback impl
#endif
}
}
सरलीकृत मैं क्योंकि हम ADL चाल के विवरण के बारे में बात नहीं कर रहे हैं यहां, लेकिन इसमें शामिल हो जाएगा।
मैं क्या बात कर रहा हूँ के संदर्भ के लिए यहाँ , लेकिन यह इस सवाल का कोई वास्ता नहीं है:
http://www.boost.org/doc/libs/1_57_0/boost/core/swap.hpp
तो इस सवाल के बारे में है, मैं कैसे मानक हेडर शामिल किए जाने पता लगा सकते हैं? _ALGORITHM_
गार्ड हेडर प्रदान किए गए विजुअल स्टूडियो में मौजूद है, लेकिन मैंने कहीं भी http://www.cplusplus.com/reference/algorithm/ पर पढ़ा है कि इसमें कोई मैक्रो होना चाहिए जिसे मैं जांच सकता हूं।
(अंतिम नोट: इस सवाल एक छोटा सा XY पक्षपाती है क्या मैं सच में चाहते std::swap
समारोह, नहीं शीर्षलेख की उपस्थिति का पता लगाने के लिए है।।)
तो क्या आप रिवर्स चाहते हैं? फॉलबैक के रूप में एक विशेष स्वैप का उपयोग करने के लिए? –
मान लें, एक सम्मेलन के रूप में, हमारे कोडबेस के ग्राहक MyCompany :: स्वैप को डिफ़ॉल्ट स्वैप फ़ंक्शन के रूप में उपयोग करेंगे, वैसे ही उपयोगकर्ताओं को व्यापक रूप से बढ़ावा दिया गया है :: स्वैप। हालांकि, उस विशेष स्वैप के कार्यान्वयन, टीडी और टी 2 प्रकारों को एसडीडी :: स्वैप के विशेषज्ञता के साथ स्वैप किए जाने के मामले में आंतरिक रूप से std :: स्वैप का उपयोग कर सकते हैं। लेकिन यदि मानक शीर्षलेख इस बिंदु पर शामिल नहीं हैं (क्योंकि मेरी उपयोगिता में कठोर लाइसेंसिंग नियमों के संबंध में उन्हें शामिल नहीं किया जाएगा), मैं इसे पहचानना चाहता हूं और कभी भी std :: swap को कॉल नहीं करना चाहता हूं। –
मैं आपके इरादे का सम्मान करता हूं लेकिन इससे लंबे समय तक मुश्किल-से-ट्रैक-डाउन बग की ओर जाता है; क्लाइंट का कोड चुपचाप व्यवहार को बदल सकता है कि वे 'शामिल करें या नहीं, और आपको क्लाइंट सपोर्ट अनुरोध –