2009-09-07 26 views
8

क्या स्थिर संदर्भ में सी ++ क्लास ऑपरेटरों को अधिभारित करना संभव है? जैसेसी ++ स्थिर ऑपरेटर ओवरलोडिंग

class Class_1{ ... } 
int main() 
{ 

    Class_1[val]... 

} 
+0

चाहिए 'Class_1 [वैल]' उपज एक के लिए उपयोग करते हैं, प्रकार? जैसा कि आप 'कक्षा_1 [वैल] वी; 'करने की उम्मीद करते हैं? –

+1

मैं इसे अभिन्न मूल्य उत्पन्न करने जा रहा था लेकिन प्रकार ठीक हैं। – jameszhao00

+0

सी ++ में, प्रकार सिस्टम में प्रकारों का प्रतिनिधित्व नहीं किया जा सकता है (केवल 'std :: type_id' है) और मैं किसी भी ऑपरेटर के बारे में नहीं सोच सकता जिसे स्थिर रूप से ओवरलोड किया जा सकता है। मेरा सुझाव है कि, यह पूछने के बजाय कि आपका कार्यान्वयन विचार सी ++ में व्यवहार्य है या नहीं, आप वास्तविक _problem_ प्रस्तुत करते हैं जो हल करने के लिए था। कोई संभावित व्यवहार्य कार्यान्वयन का सुझाव दे सकता है। – sbi

उत्तर

13

यदि आप बिल्ट-इन ऑपरेटर का उपयोग करके मेटाप्रोग्रामिंग की तलाश में हैं: ऐसी चीज संभव नहीं है - अंतर्निहित ऑपरेटर रनटाइम मानों पर काम करते हैं, संकलन समय मानों पर नहीं।

आप उस के लिए boost::mpl उपयोग कर सकते हैं, और बिल्ट-इन ऑपरेटरों का उपयोग करने के बजाय, अपने टेम्पलेट्स at तरह op[] के लिए plus<a, b>op+ आदि

int main() { 
    using boost::mpl::vector; 
    using boost::mpl::at_c; 
    using boost::mpl::plus; 
    using boost::mpl::int_; 

    typedef vector<int, bool, char, float> Class_1; 
    typedef vector< int_<1>, int_<2> > Numeric_1; 

    at_c<Class_1, 0>::type six = 6; 
    typedef plus<at_c<Numeric_1, 0>::type 
       ,at_c<Numeric_1, 1>::type>::type r; 
    int i3[r::value] = { 4, 5, 6 }; 
    return ((i3[0] + i3[1] + i3[2]) * six) == 90; 
} 
3

तुम्हारा मतलब ऑपरेटर एक वर्ग पर चल रही है, तो नहीं। यही कारण है कि कोई मतलब नहीं है, यह int या double पर operator + मई ऑपरेटर कह की तरह है। ऑपरेटर फ़ंक्शंस के लिए सिंटैक्टिक चीनी होते हैं और वे varibles (मानों) प्रकारों पर काम नहीं करते हैं।

+1

यदि आपके पास कुछ प्रकार की उपयोगिता वर्ग है - केवल स्थिर सदस्यों के साथ - जो "खुद" को कुछ लोड करता है, जिसे आप सबसे सरल तरीके से एक्सेस करना चाहते हैं - ऑपरेटर का उपयोग करके '[] '। –

+1

हां, @ jave.web की टिप्पणी में जोड़ना: यह निश्चित रूप से मामलों में समझ में आता है * जब कक्षा के स्थिर दायरे में डेटा होता है। (ओपी भी स्थिर दायरे का स्पष्ट रूप से उल्लेख करता है।) इसलिए, सरल अंकगणित के साथ, जैसा कि आपके उदाहरण में नहीं है, लेकिन [],(), <<, >> आदि जैसी चीजें किसी भी प्रकार के जटिल प्रबंधक वर्गों के लिए सही वाक्य रचनात्मक चीनी हो सकती हैं। , एक सिंगलटन उदाहरण मजबूर किए बिना। –

5

मुझे विश्वास नहीं है कि यह संभव है, हालांकि मैं इस मोर्चे पर गलत हो सकता हूं। मैं पूछना चाहता हूं कि आप ऐसा क्यों करना चाहते हैं। उदाहरणों की बजाय कक्षा पर संचालन करने की बजाय, शायद आपको अपने आवेदन के दौरान केवल एक उदाहरण की आवश्यकता है? इस मामले में, आपको शायद the singleton pattern का उपयोग करना चाहिए।

+1

मैं पागल की तरह सिंगलटन पैटर्न का उपयोग करता था, लेकिन तब रुक गया क्योंकि सिंगलटन कोड परीक्षण लिखने में इतनी परेशानी है। – jameszhao00

1

नहीं, ऑपरेटर कक्षा के स्थिर सदस्य नहीं हो सकते हैं। इसके बजाय एक नियमित स्थिर कार्य का प्रयोग करें।

संबंधित मुद्दे