आप सिंटैक्स में उपस्थित नहीं होने वाले चरित्र को पेश नहीं कर सकते हैं, जैसे आपके द्वारा उल्लिखित बैकटिक। लेकिन वहाँ एक "named operator" trick जिसके साथ आप एक "नाम ऑपरेटर" लागू कर सकते हैं निम्न सिंटैक्स प्राप्त करने के लिए है:
std::cout << (2 <Pow> 3) << std::endl;
चाल <
और >
अधिक भार एक कस्टम प्रकार के लिए, इस तरह पर निर्भर करता है:
const struct PowOperator {} Pow;
struct PowInvoker
{
int lhs;
};
PowInvoker operator< (int lhs, PowOperator)
{
return {lhs};
}
int operator> (PowInvoker lhs, int rhs)
{
return std::pow(lhs.lhs, rhs);
}
int main()
{
std::cout << (2 <Pow> 3) << std::endl;
}
[Live example]
सूचना है कि आप इन नामित ऑपरेटरों की पूर्वता को प्रभावित नहीं कर सकते हैं: वे <
, <=
,के रूप में ही पूर्वता होगा, और >=
। यदि आपको अलग-अलग प्राथमिकता की आवश्यकता है, तो आपको एक अलग डिलीमीटर का उपयोग करना होगा (जो शायद अच्छी तरह से पठनीय नहीं होगा)।
अस्वीकरण
ऊपर चाल है "चालाक" कोड है, यह काफी सी ++ वाक्य रचना का दुरुपयोग है। मैंने सवाल उठाया कि "क्या संभव है," और एक समान रूप से अनुमानित "यह है" के साथ उत्तर दिया। मैं std::pow
को बदलने या इसके लिए "नवीनता" वाक्यविन्यास प्रदान करने के रूप में इस तरह के मामूली मामलों के लिए अभ्यास में इसका उपयोग करने की अनुशंसा करता हूं। उपरोक्त वर्णित ऑपरेटर प्राथमिकता चेतावनी एक कारण है; निर्माण की सामान्य अपरिचितता एक और है। कोड की गुणवत्ता को उत्पन्न करने वाले डब्ल्यूटीएफ की संख्या में मापा जाता है (कम बेहतर होता है), और यह चाल उनमें से एक समूह (और उस पर बड़े) उत्पन्न करती है।
इसका अभी भी उपयोग है: डोमेन-विशिष्ट भाषा बनाने के लिए। प्रोग्रामिंग में ऐसे मामले हैं जहां डीएसएल को सी ++ कोड में एम्बेड करना क्रम में है; ऐसे मामलों में (और ऐसे मामलों में केवल) क्या मैं इसका उपयोग करने पर विचार करूंगा।
नहीं। आप जो चाहते हैं उसे करने के लिए मौजूदा लोगों को अधिभारित कर सकते हैं, आप मैक्रोज़ के साथ भी परेशान हो सकते हैं ताकि प्रीप्रोसेसर उस दूसरे ऑपरेटर के साथ उच्चारण को बदल दे।कि एक अच्छा विचार है या नहीं एक और बात यह है जी के .. – stijn
कस्टम निर्माण ++ ;-) – Matt
आप के लिए एक [* उपयोगकर्ता परिभाषित शाब्दिक *] (http://en.wikipedia.org/wiki/C एक ऑपरेटर आपूर्ति कर सकता है % 2 बी% 2 बी 11 # उपयोगकर्ता परिभाषित_लिटर) प्रत्यय, उदाहरण के लिए 2.3_pow 2^3 का मतलब था - आपको एक अस्थायी टेम्पलेट मॉडल का उपयोग करना होगा, एक अस्थायी अला '<' 2 ','। ',' 3 '> ', या" 2.3 "_pow के लिए व्यवस्थित करें और' const 'को संभालें रनटाइम पर char * '। ऑपरेटर टेम्पलेट और बदसूरत लिखने के लिए थकाऊ होगा (यहां तक कि भ्रामक 2.3 भी एक फ्लोट/डबल की तरह दिखता है) उपयोग में .... –