2012-07-03 10 views
10

Mam bibliotekę klasy C# z przeciążonymi metodami, a jedna metoda ma parametr ref, a druga ma parametr wartości. Mogę nazwać te metody w języku C#, ale nie mogę uzyskać tego poprawnie w C++/CLI. Wydaje się, że kompilator nie może odróżnić tych dwóch metod.Jak wywołać przeciążone funkcje C#, których jedyną różnicą jest parametr przekazany przez ref lub nie w C++/cli

Oto mój kod C#

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

i mój kod 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; 
} 

wiem w C++ nie mogę zadeklarować funkcje przeciążenie gdzie jedyną różnicą w podpisie funkcją jest to, że jeden bierze obiekt, a drugi odwołuje się do obiektu, ale w języku C# mogę.

Czy jest to funkcja obsługiwana w języku C#, ale nie w C++/CLI? Czy istnieje jakieś obejście?

+0

Czy masz prawdziwy przykład na świecie, kiedy może to być wymagane? – Jodrell

+0

Czy próbowałeś go ze wskaźnikiem zamiast zmiennej? –

+0

Czy to się jeszcze komplikuje? jeśli to też jest zaintrygowane! +1 –

Odpowiedz

1

Jako obejście można zbudować C# klasy pomocnika, którego używasz w C++/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

Znalazłem coś pomocny na Wikipedia:

C++/CLI używa "^% "składnia wskazująca śledzące odwołanie do uchwytu. Podobnie jest w przypadku użycia "* &" (odniesienie do wskaźnika) w Standard C++.

Powiązane problemy