改进make函数的Swig-tcl包装

时间:2015-03-24 12:45:10

标签: c++ tcl swig

包装构造函数时,如:

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

Swig-tcl太神奇了!确实在tcl我可以做到:

A a
a hello

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

A make(){ return A(); }
然后,Swig-tcl的包装变得非常混乱:

set a [make]
$a hello

我想知道在使用make函数时是否有办法恢复tcl脚本的初始清晰度。

1 个答案:

答案 0 :(得分:1)

我觉得它不是特别凌乱!只是第二种情况下的命令具有您无法控制的名称,因此您将名称保留在变量中。

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

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

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

您应该检查rename的版本是否有效;它可能 - 虽然不太可能 - 它可能不会......