View on GitHub

Cpptcl

C++/Tcl——辅助实现嵌入式Tcl解释器的C++接口库

English 中文

Download this project as a .zip file Download this project as a tar.gz file
[顶层] [下一页]

快速使用

使用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++程序间可以很容易地交换数据。