拡張 Tcl の中の,tcl++.h を取り出してみると良いでしょう.これ
は,最初に Parag Patel によって開発された版を元にしています.これは,
C++ で Tcl インタプリタをオブジェクトとして生成する為の,Tcl インタプ
リタクラスを定義しています.
また,パッチ
ftp://harbor.ecn.purdue.edu/pub/tcl/distrib/tk3.2forC++.patch
は,tk 3.2 の main.c や,幾つかのルーチンにパッチを当て,C++ コンパイ
ラでのコンパイルを可能にします.このコードに関しては,Ken Yap
に感謝します.
Mark Diekhans と Karl Lehenbauer は,これを使って,拡張 Tcl の
ハンドル機能と組合せ,C++ クラスまわりの Tcl コマンドを作成しました.
この Tcl ハンドル機能は,Tcl コードからのテキストハンドルで参
照できる,表項目管理の方法を提供します.これは,一つのコマンドでデータ
構造を生成する必要のあるアプリケーションに,特定のデータ構造への参照返
し(例えば,ポインタ) や,他のコマンドからのデータ構造へのアクセスを可
能にします.例としては,ファイルハンドルがあげられます.
ハンドルのテーブルは,Tcl からアクセスされるクラスのインスタン
スのポインタを格納しています.例えば,クラスを `foo_cl' として,コマン
ド "new" を,このインスタンスを生成し,インスタンスへの Tcl ハンドルを
返すコマンドとして定義します.そうすると,ハンドルをメンバ関数からアク
セス可能とすることが出来ます.ハンドルは,実際には `this' ポインタです.
例えば:
set obj [foo_cl::new]
foo_cl::baz $obj "Hello world"
foo_cl::delete $obj
これは,オブジェクト指向の全てではありませんが,非常に便利ではあります.