2

私は C++ に、整数値を含み、いくつかのメソッドを提供するクラス TInt を持っています。また、int を受け入れるデフォルトのコンストラクターもあり、C++ で次のように言うことができます。

TInt X=3;

SWIG を使用してこのクラスと他のクラスを C# にエクスポートしたいのですが、C# で同じ行を記述できるようにするために何をする必要があるかわかりません。

TInt X=3;

現在、予期されるエラー「'int' を 'TInt' に暗黙的に変換できません」が発生しています。

TInt を引数として受け入れる他のクラスにもメソッドがあるため、事態はさらに複雑になります。たとえば、TIntV は TInt のベクトルを含むクラスであり、メソッド Add(TInt& Val) を持ちます。C# では、このメソッドを次のようにしか呼び出すことができません。

TIntV Arr;
Arr.Add(new TInt(3));

どんな助けでも大歓迎です。

グレゴール

4

2 に答える 2

4

Xi Huanによる回答を含む完全なソリューションを見つけました:

SWIG のインターフェイス ファイル (*.i) に、次の行を追加しました。

%typemap(cscode) TInt %{
    //this will be added to the generated wrapper for TInt class
    public static implicit operator TInt(int d)
    {
        return new TInt(d);
    }
%}

これにより、生成された .cs ファイルに演算子が追加されます。覚えておくべきことの 1 つは (修正するのに 1 時間かかりました)、このコンテンツは、C++ クラスをインポートするコードの前に宣言されたインターフェイス ファイルにある必要があるということです。

于 2013-11-09T13:40:24.277 に答える
3

Implicit キーワードを使用して、暗黙的なユーザー定義型変換演算子を宣言できます。

public class Test
{
    public static void Main()
    {
        TInt X = 3;
        Console.WriteLine(X);
    }
}

class TInt
{
    public TInt(int d) { _intvalue = d; }
    public TInt() { }

    int _intvalue;

    public static implicit operator TInt(int d)
    {
        return new TInt(d);
    }
}
于 2013-11-09T11:52:18.053 に答える