オーバーロードされたメソッドを含む C# クラス ライブラリがあり、1 つのメソッドには ref パラメーターがあり、もう 1 つのメソッドには値パラメーターがあります。これらのメソッドは C# で呼び出すことができますが、C++/CLI では正しく呼び出すことができません。コンパイラはこれら 2 つのメソッドを区別できないようです。
ここに私の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 ではサポートされていませんか? 回避策はありますか?