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_*的主要内容,如果未能解决你的问题,请参考以下文章

js构造函数 实例与new对象

Python 的 __new__()方法与实例化

无法将类实例传递给构造函数

SWIG C++ TCL:处理内存中预先存在的对象

TCL - 对 g++ 的 `_imp__Tcl_ResetResult' 的未定义引用

将 Qt 函数导出到 Tcl