我正在尝试使用SWIG将旧的Tcl接口替换为C ++。这是一个示例类:
class test {
std::string str;
public:
test(const char * s):str(s) {}
void print() const {std::cout << str << std::endl;}
};
以下是使用它的标准方法:
load ./example.so example
test s "this is a test string"
s print
但是我想保留不使用""
的旧接口的简单性。我发现我可以做类似的事情:
load ./example.so example
proc TEST {args} { test [lindex $args 0] [lrange $args 1 end] }
TEST s2 this is another test string
s2 print
这看起来很简单并且完美无瑕,但是,当然,我不能在用户脚本中使用proc
定义。我不知道我还能把它放在哪里。有没有办法把它放在.i文件中?
答案 0 :(得分:1)
我想你可以把它放在你的.i
文件中:
%init %{
Tcl_Eval(interp, "proc TEST {args} { ... }");
%}
这会将对Tcl_Eval
的调用(将执行该过程)插入到模块的初始化函数中,并且只要interp
上下文在那里可用(警告!检查这个!)然后你会把所有东西都打包好。
如果您有很多代码,请考虑改为调用Tcl_EvalFile
,或者调用source
脚本代码的Tcl代码(如果您需要复杂的话,则需要脚本以找到要读取的文件。)