Как вызывать перегруженные функции c #, единственная разница которых заключается в том, что параметр передается по ссылке или нет в c++/cli

У меня есть библиотека классов C #с перегруженными методами, и один метод имеет параметр ref, а другой — параметр значения. Я могу вызывать эти методы в C #, но не могу сделать это правильно в C++/CLI. Кажется, компилятор не может различить эти два метода.

Вот мой код C #

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;
}

Я знаю, что в C++ я не могу объявлять перегруженные функции, единственная разница в сигнатуре которых состоит в том, что одна принимает объект, а другая ссылается на объект, но в C #я могу.

Эта функция поддерживается в C #, но не в C++/CLI? Есть ли обходной путь?

10
задан czz 3 July 2012 в 08:28
поделиться