快速使用
使用C++/Tcl能迅速地将Tcl和C++融合在一起。本页将介绍如何能方便迅捷地用C++扩展Tcl的功能或将一个Tcl解释器嵌入到普通的C++工程中。
Hello World (扩展Tcl)
对于以下的一段简单代码:// example1.cc
#include "cpptcl.h"
#include <iostream>
using namespace std;
void hello() {
cout << "Hello C++/Tcl!" << endl;
}
CPPTCL_MODULE(Mymodule, i) {
i.def("hello", hello);
}
在将其编译成一个动态链接库
mymodule.so
后(关于在Linux下编译动态链接库.so文件,请查看./test目录下的Makefile文件),我们就可以在Tcl中使用该hello()
函数:$ tclsh
% load ./mymodule.so
% hello
Hello C++/Tcl!
% for {set i 0} {$i != 4} {incr i} { hello }
Hello C++/Tcl!
Hello C++/Tcl!
Hello C++/Tcl!
Hello C++/Tcl!
%
换言之,我们使用可扩展模块(编译后的动态链接库)扩展了Tcl解释器的功能。其新扩展的命令功能由C++函数定义。
Hello World (嵌入Tcl解释器)
对于以下的一段简单代码:// example2.cc
#include "cpptcl.h"
#include <iostream>
#include <string>
using namespace std;
using namespace Tcl;
void hello() {
cout << "Hello C++/Tcl!" << endl;
}
int main() {
interpreter i;
i.def("hello", hello);
string script = "for {set i 0} {$i != 4} {incr i} { hello }";
i.eval(script);
}
编译后该程序将输出如下的结果:
$ ./example2
Hello C++/Tcl!
Hello C++/Tcl!
Hello C++/Tcl!
Hello C++/Tcl!
$
这个例子显示了如何将一个Tcl解释器作为C++的一个简单对象嵌入到程序中。
此外,我们可以在该解释器中添加新的Tcl命令并执行任意的脚本。解释器和C++程序间可以很容易地交换数据。