C++-&燃气轮机;C#使用SWIG:如何为类使用默认构造函数 我在C++中有一个包含整型值的类着色,并提供了一些方法。它还有一个默认构造函数,它接受int,它允许我在C++中说: TInt X=3;

C++-&燃气轮机;C#使用SWIG:如何为类使用默认构造函数 我在C++中有一个包含整型值的类着色,并提供了一些方法。它还有一个默认构造函数,它接受int,它允许我在C++中说: TInt X=3;,c#,swig,C#,Swig,我想使用SWIG将这个类和其他类导出到C#中,但我不知道我需要做什么才能用C#写相同的行: TInt X=3; 现在我得到一个预期的错误“无法隐式地将'int'转换为'TInt'” 事情更复杂,因为在其他类中也有接受TInt作为参数的方法。例如,TIntV是一个包含TInt向量的类,它有一个Add方法(TInt&Val)。 在C#中,我只能将此方法称为: TIntV Arr; Arr.Add(new TInt(3)); 任何帮助都将不胜感激 Gregor您可以使用关键字声明隐式用户定义的类型

我想使用SWIG将这个类和其他类导出到C#中,但我不知道我需要做什么才能用C#写相同的行:

TInt X=3;
现在我得到一个预期的错误“无法隐式地将'int'转换为'TInt'”

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

TIntV Arr;
Arr.Add(new TInt(3));
任何帮助都将不胜感激

Gregor

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

:


我找到了一个完整的解决方案,包括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文件中。
要记住的一件事(我花了一个小时来修复它)是这个内容必须在导入C++类的代码之前声明的接口文件中。我知道我可以对生成的.cs文件进行这样的修改,但是有没有办法告诉SWIG自动包含此代码?我不想每次修改C++代码时重新编辑生成的.cs文件。是的,我想是这样。只需将隐式运算符放入一个分部类,并告诉SWIG为
TInt
生成分部类。
%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);
    }
%}