SWIG TCL:将类构造函数名称从 new_* 重命名为 create_*
Posted
技术标签:
【中文标题】SWIG TCL:将类构造函数名称从 new_* 重命名为 create_*【英文标题】:SWIG TCL : Renaming the class constructor name from new_* to create_* 【发布时间】:2012-04-04 06:31:34 【问题描述】:我们可以像使用 %rename 指令重命名函数一样重命名构造函数吗?
%rename(create_cell) Cell(string);
基本上,我想以create_cell
之类的方式结束,而不是new_Cell
。
【问题讨论】:
【参考方案1】:我怀疑您当时不能(您是否尝试过它是否有效?)但是您可以做一些事情。 (当然,只做其中之一。)
-
编辑生成的代码(SWIG 编写 C++–Tcl 绑定代码,然后编译),使字符串
"new_Cell"
为 "create_cell"
。我认为您应该能够在 Tcl_CreateCommand 或 Tcl_CreateObjCommand
之类的函数调用中找到更改参数的位置,但也可能在宏中,具体取决于代码生成的完成方式。 (我从未真正看过。)
使用load
将代码导入Tcl,然后使用rename
命令。名字不是一成不变的。 load
可能在调用 package require
的实现内部;只需执行您通常会首先使用错误名称的代码,然后执行以下操作:
rename new_Cell create_cell
添加包装命令或过程;这些都可以:
proc create_cell args
eval new_Cell $args
# With 8.5 or later
proc create_cell args
new_Cell *$args
# With 8.6
proc create_cell args
tailcall new_Cell *$args
# Or do this; not a procedure, an alias
interp alias create_cell new_Cell
【讨论】:
如果您使用包装器或别名,您还可以使用rename
将包装后的 new_Cell
移动到另一个 Tcl 命名空间,它不会对您所看到的内容造成太大干扰.纯粹的化妆品,但方便。 (我自己,我会包装所有内容,因为我不太喜欢 SWIG 生成的界面样式;Tcl 不是 C++,它的 API 有自己的风格。)
谢谢 Donal,我想我只是将 proc 重命名为 TCL。这似乎是最简单的事情。以上是关于SWIG TCL:将类构造函数名称从 new_* 重命名为 create_*的主要内容,如果未能解决你的问题,请参考以下文章