【问题标题】:SWIG TCL : Renaming the class constructor name from new_* to create_*SWIG TCL:将类构造函数名称从 new_* 重命名为 create_*
【发布时间】:2012-04-04 06:31:34
【问题描述】:

我们可以像使用 %rename 指令重命名函数一样重命名构造函数吗?

%rename(create_cell) Cell(string);

基本上,我想以create_cell 之类的方式结束,而不是new_Cell

【问题讨论】:

    标签: tcl swig


    【解决方案1】:

    我怀疑您当时不能(您是否尝试过它是否有效?)但是您可以做一些事情。 (当然,只做其中之一。)

    1. 编辑生成的代码(SWIG 编写 C++–Tcl 绑定代码,然后编译),使字符串 "new_Cell""create_cell"。我认为您应该能够在 Tcl_CreateCommand 或 Tcl_CreateObjCommand 之类的函数调用中找到更改参数的位置,但也可能在宏中,具体取决于代码生成的完成方式。 (我从未真正看过。)
    2. 使用load 将代码导入Tcl,然后使用rename 命令。名字不是一成不变的。 load 可能在调用 package require 的实现内部;只需执行您通常会首先使用错误名称的代码,然后执行以下操作:

      rename new_Cell create_cell
      
    3. 添加包装命令或过程;这些都可以:

      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。这似乎是最简单的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多