改进make函数的Swig-tcl包装

Improve the Swig-tcl wrapping of a make function

本文关键字:Swig-tcl 包装 函数 make 改进      更新时间:2023-10-16

包装类似的构造函数时

struct A {
  A(){}
  void hello() {std::cout << "hellon";}
};

Swig tcl太棒了!事实上,在tcl中,我只能做到:

A a
a hello

然而,在某些情况下,对象a的创建并不简单(即,我可能只想返回对堆上另一个对象的引用),并且必须通过如下的make函数:

A make(){ return A(); }

那么Swig-tcl的包装就变得一团糟:

set a [make]
$a hello

我想知道在使用make函数时,是否有一种方法可以恢复tcl脚本的初始清晰度。

我不认为它特别乱!只是第二种情况下的命令有一个您无法控制的名称,所以您将该名称保留在一个变量中。

您可以重命名对象命令或为其创建别名:

rename $a a
interp alias {} a {} $a

使用这两种技术后,您将获得一个名为a的命令,可以对其调用方法。但是,在这两种情况下,如果您将对象作为参数传递给另一个SWIGged函数或方法,则需要原始名称。因此,我个人建议只使用变量中带有名称的版本。

您应该检查带有rename的版本是否有效;有可能——尽管不太可能——它可能不会…