2012-07-03 10 views
10

में मेरे पास अधिभारित विधियों वाला सी # क्लास लाइब्रेरी है, और एक विधि में एक रेफ पैरामीटर है और दूसरे का मान पैरामीटर है। मैं इन तरीकों को सी # में कॉल कर सकता हूं, लेकिन मैं इसे सी ++/सीएलआई में सही नहीं कर सकता। ऐसा लगता है कि कंपाइलर इन दो तरीकों को अलग नहीं कर सकता है।अधिभारित सी # फ़ंक्शंस को कैसे कॉल करें, केवल एक ही अंतर पैरामीटर द्वारा पारित किया गया है या सी ++/क्ली

यहाँ मेरी सी # कोड

namespace test { 
    public class test { 
     public static void foo(int i) 
     { 
      i++; 
     } 
     public static void foo(ref int i) 
     { 
      i++; 
     } 
    } 
} 

और मेरे C++/CLI कोड

int main(array<System::String ^> ^args) 
{ 
    int i=0; 
    test::test::foo(i);  //error C2668: ambiguous call to overloaded function 
    test::test::foo(%i); //error C3071: operator '%' can only be applied to an instance of a ref class or a value-type 
    int %r=i; 
    test::test::foo(r);  //error C2668: ambiguous call to overloaded function 
    Console::WriteLine(i); 
    return 0; 
} 

मैं सी में पता है ++ मैं अधिभार कार्यों की घोषणा नहीं कर सकते हैं जहां समारोह हस्ताक्षर में फर्क सिर्फ इतना है कि है कोई ऑब्जेक्ट लेता है और दूसरा ऑब्जेक्ट का संदर्भ लेता है, लेकिन सी # मैं कर सकता हूं।

क्या यह सुविधा सी # में समर्थित है लेकिन सी ++/सीएलआई में नहीं है? क्या कोई कामकाज है?

+0

क्या आपके पास इसकी आवश्यकता होने पर एक सच्चे असली उदाहरण है? – Jodrell

+0

क्या आपने चर के बजाए पॉइंटर के साथ इसे आजमाया था? –

+0

क्या यह भी निर्माण करता है? अगर यह भी चिंतित है! +1 –

उत्तर

1

एक समाधान आप एक सी # सहायक वर्ग है कि आप ++/CLI सी में उपयोग निर्माण कर सकते हैं के रूप में

namespace test 
{ 
    public class testHelper 
    { 
     public static void fooByVal(int i) 
     { 
      test.foo(i); 
     } 

     public static void fooByRef(ref int i) 
     { 
      test.foo(ref i); 
     } 
    } 
} 
0

मैं Wikipedia पर कुछ उपयोगी पाया:

C++/CLI एक "^% का उपयोग करता "एक हैंडल के ट्रैकिंग संदर्भ को इंगित करने के लिए वाक्यविन्यास। यह मानक सी ++ में "* &" (सूचक के संदर्भ में) का उपयोग करने के लिए अवधारणा में समान है।

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