SWIG& C#:重写void返回方法以返回类实例本身

时间:2015-03-10 21:24:26

标签: c# c++ wrapper swig

我正在尝试为C ++代码创建一个C#包装器,它重写所有返回void的方法,以返回对类实例本身的引用,以允许使用C#-side API进行链式方法调用。

然而,这似乎是一件非常重要的事情; csout typemap允许重写void返回方法的主体,但不允许重写函数签名。这不起作用:

%typemap(csout, excode=SWIGEXCODE) void {
    $imcall;$excode
    return this;
}

另一方面,cstype typemap允许重写类型void,但在尝试重写时,$ csclassname引用void类型本身(生成SWIGTYPE_void),而不是包含返回void类型的方法的类:

%typemap(cstype, out="$csclassname") void "void"

我知道SWIG并不打算进行这种转型,但它似乎非常接近。堆叠另一个构建工具来进行一次转换是非常恼人的。 SWIG是否可以提供此功能?

编辑:我刚刚发现我可以更改C ++返回类型以返回指向类本身的指针。 (我是C ++ lib的作者,我现在正在进一步开发它。)然后使用这样的规则,我可以得到我想要的东西:

%typemap(csout, excode=SWIGEXCODE) SWIGTYPE * {
    $imcall;$excode
    return this;
}

现在唯一的缺点是SWIGTYPE *指的是任何一种指针。我想让它只匹配类本身类型的指针。难道没有办法有更多的表达类型匹配吗?或$ special_variables具有包含类的名称?

0 个答案:

没有答案