TCLスクリプトとC++拡張の作業セットがありますが、どのように動作し、どのようにコンパイルされたのかはわかりません。私はgccとlinux Archを使用しています。マクロとメイン関数なしでTCLのC++拡張機能をコンパイルする方法
次のように動作します.test.tclスクリプトを実行すると、C++拡張機能に定義されたクラスのオブジェクトにいくつかの値が渡されます。これらの値を使用すると、マクロを使った拡張が結果を与え、グラフィックスをいくつか出力します。
私が持っているtest.tclはスクリップで:
#!object
use_namespace myClass
proc simulate {} {
uplevel #0 {
set running 1
for {} {$running} { } {
moveBugs
draw .world.canvas
.statusbar configure -text "t:[tstep]"
}
}
}
set toroidal 1
set nx 100
set ny 100
set mv_dist 4
setup $nx $ny $mv_dist $toroidal
addBugs 100
# size of a grid cell in pixels
set scale 5
myClass.scale 5
object.ccは、次のようになります。
#include //some includes here
MyClass myClass;
make_model(myClass); // --> this is a macro!
次のようにマクロ "make_model(MyClassの)は、" 拡大:
namespace myClass_ns { DEFINE_MYLIB_LIBRARY; int TCL_obj_myClass
(mylib::TCL_obj_init(myClass),TCL_obj(mylib::null_TCL_obj,
(std::string)"myClass",myClass),1); };
クラスの定義は次のとおりです。
class MyClass:
{
public:
int tstep; //timestep - updated each time moveBugs is called
int scale; //no. pixels used to represent bugs
void setup(TCL_args args) {
int nx=args, ny=args, moveDistance=args;
bool toroidal=args;
Space::setup(nx,ny,moveDistance,toroidal);
}
すべてが、あるセルから別のセルに移動するいくつかのドット(バグ)を持つセルグリッドを作成します。
私の質問は以下のとおりです。
- はどのようにクラスメソッドと変数は、スクリプト値を得るのですか?
- C++コードをメイン関数なしでコンパイルするにはどうすればよいですか?
- エクステンション内でマクロが何をしているのか、それがどのように機能しているのですか?
のTclでコマンドが実行されるたびに感謝
@JoselitoSあなたのサンプルは非常に多くの詳細が欠落しているので、理解するのは本当に難しいです。あなたの質問を編集してそこに情報を入れてください。 (ここのコメントは、あなたが書くことができる程度に非常に限られています;それは完全な議論ではなく、_comments_のためです) –
はい!あなたの答えは私を助けてくれました。私はそれに取り組んでおり、それはすべての人に便利であるために数日で質問を改善するだろう – JoselitoS
私は質問を改正した、私はそれが今よりよく理解できることを願って – JoselitoS