Boost.Preprocessor की शुरूआत पृष्ठ पर, एक उदाहरण A.4.1.1 क्षैतिज में दी गई है दोहराव
#define TINY_print(z, n, data) data
#define TINY_size(z, n, unused) \
template <BOOST_PP_ENUM_PARAMS(n, class T)> \
struct tiny_size< \
BOOST_PP_ENUM_PARAMS(n,T) \
BOOST_PP_COMMA_IF(n) \
BOOST_PP_ENUM( \
BOOST_PP_SUB(TINY_MAX_SIZE,n), TINY_print, none) \
> \
: mpl::int_<n> {};
BOOST_PP_REPEAT(TINY_MAX_SIZE, TINY_size, ~) // Oh! a tilde!
#undef TINY_size
#undef TINY_print
एक व्याख्या नीचे दी गई है:
कोड निर्माण की प्रक्रिया BOOST_PP_REPEAT
पर कॉल करके, उच्च-आदेश मैक्रो द्वारा कॉल किया गया है जो बार-बार अपने दूसरे तर्क (TINY_size
) नामक मैक्रो को आमंत्रित करता है। पहला तर्क दोहराए गए आमंत्रणों की संख्या निर्दिष्ट करता है, और तीसरा कोई भी डेटा हो सकता है; यह लागू होने वाले मैक्रो के अपरिवर्तित पर पारित किया जाता है। इस मामले में, TINY_size
उस डेटा का उपयोग नहीं करता है, इसलिए ~
पास करने का विकल्प मनमाना था। [5]
(जोर मेरा)
और वहाँ टिप्पणी है:
[5]
~
एक पूरी तरह से मनमाने ढंग से विकल्प नहीं है। @
और $
दोनों अच्छे विकल्प हो सकते हैं, सिवाय इसके कि वे तकनीकी रूप से बुनियादी चरित्र सेट का हिस्सा नहीं हैं जो सी ++ कार्यान्वयन के लिए आवश्यक हैं। अनदेखा की तरह एक पहचानकर्ता मैक्रो विस्तार के अधीन हो सकता है, जिससे अप्रत्याशित परिणाम सामने आते हैं।
इसलिए, टिल्डे बस एक जगह धारक है क्योंकि एक तर्क आवश्यक है, लेकिन कोई भी आवश्यक नहीं है। चूंकि किसी भी उपयोगकर्ता द्वारा परिभाषित पहचानकर्ता wannabe का विस्तार किया जा सकता है, तो आपको कुछ और उपयोग करने की आवश्यकता है।
ऐसा लगता है कि ~
(बाइनरी निषेध है कि अक्सर कहा जाता है नहीं है) काफी अप्रयुक्त है +
या -
उदाहरण के लिए की तुलना में है, इसलिए भ्रम की संभावना बहुत कम है।एक बार जब आप इस पर बस जाते हैं, तो इसका उपयोग लगातार नया देता है जिसका अर्थ है टिल्डे; स्ट्रीमिंग डेटा के लिए operator<<
और operator>>
का उपयोग करने की तरह एक सी ++ मुहावरे बन गया है।
यह एक डमी तर्क – Anycorn
~ बिटवाई पूरक है, जैसा कि आप शायद जानते हैं। ऐसा लगता है कि सिर्फ मेरे लिए प्लेसहोल्डर है। मुझे नहीं लगता कि इसका कोई विशेष अर्थ है। –