2

c++/cli で同じことを行う方法がわかりません。デリゲートを作成する方法とそれを呼び出す方法が明確ではありません。

誰かが私を助けることができますか?ありがとう。

    public class Writer {

    internal Dictionary<Type, Action<object>> Reflective = new Dictionary<Type, Action<object>>();

    public Writer()
    {
        Reflective.Add(typeof(float), (value) => Write((float)value));
        Reflective.Add(typeof(double), (value) => Write((double)value));
    }

    public void Write(float value)
    {
        Console.WriteLine("Float");
    }

    public void Write(double value)
    {
        Console.WriteLine("Double");
    }

    public void Write<T>(T[] values)
    {
        var method = this.Reflective[typeof(T)];
        foreach (var value in values)
        {
            method(value);
        }
    }
}
4

1 に答える 1

0

すべてを説明するわけではありませんが、最初にいくつかの明白でない事柄を以下に示します。

typeof(float) ==> System::Single::typeid
// I like to specify the full namespace for explicitness.

ラムダ: C++/CLI はラムダをサポートしていません。本格的なメソッドを宣言し、それへのデリゲートを構築する必要があります。幸いなことに、すでにそれを持っているので、2 つの Write メソッドが機能するはずです。デリゲートを宣言するときに忘れないでください。それがインスタンス メソッドの場合は、関数を呼び出すオブジェクトを指定する必要があります。これはthisコード内にある必要があります。

于 2012-05-16T18:25:55.403 に答える