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 文件中。要记住的一件事(我花了一个小时来修复它)是这个内容必须在导入 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 回答