C ++ - > C#使用SWIG:如何使用类的默认构造函数

时间:2013-11-09 11:38:40

标签: c# swig

我在C ++中有一个类TInt,它包含一个整数值并提供了一些方法。它还有一个接受int的默认构造函数,它允许我在c ++中说:

TInt X=3;

我想使用SWIG将此类和其他类导出到C#,我无法弄清楚我需要做什么才能在C#中写入同一行:

TInt X=3;

现在我收到预期的错误“无法将'int'隐式转换为'TI'”

事情更复杂,因为其他类中也有接受TInt作为参数的方法。例如,TIntV是包含TInt向量的类,并且具有方法Add(TInt& Val)。 在C#中,我只能将此方法称为:

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

非常感谢任何帮助。

格里

2 个答案:

答案 0 :(得分:4)

我找到了一个完整的解决方案,其中包括席欢的答案:

在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文件中。 要记住的一件事(花了我一个小时来修复它)是这个内容必须在导入c ++类的代码之前声明的接口文件中。

答案 1 :(得分:3)

您可以使用implicit关键字来声明隐式用户定义的类型转换运算符。

Example

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