こんばんは、高木です。

今日は日が変わる直前ギリギリの投稿になってしまいました。
明日はもう少し余裕を持ちたいと思います。

Tclには名前空間の機能があります。
けれども、拡張パッケージを自分で作るようなヘビーユーザーを除けば、Tcl/Tkのスクリプトで名前空間を使おうという人は稀かもしれませんね。

今回作っているラッパーライブラリでも、名前空間をクライアントコードが積極活用することは想定していません。
なので、名前空間を使うためのライブラリ機能はとくに用意しないつもりです。

ただし、ライブラリの内部では名前空間を利用するつもりです。
名前空間の使い方というのは、どんな言語でも大体そんな感じではないでしょうか?

ライブラリ内部では、cpp14tk名前空間を使う予定です。
今回するといけませんので、念のためお断りしておくと、C++の名前空間でも、cpp14tkをインライン名前空間として使います。
しかし、今の話題はあくまでもTclの機能としての名前空間です。

ラッパーライブラリでは、内部的に名前を自動生成する必要があります。
たとえば、ウィジェットの-commandオプションやbindなどで指定するコールバックにラムダ式などの関数オブジェクトを指定できるようにしますが、内部的にはTcl_CreateObjCommandでコマンドを作成しなければなりません。
そのときにコマンド名が必要になるため、自動生成してあげる必要があります。

こうして自動生成する名前は、可能なかぎりcpp14tk名前空間におさめようということです。
そうすることで、クライアントコードで明示的に作った名前と衝突するリスクを回避することができます。

ライブラリの初期化時に、

だけのスクリプトでも実行しておくことになるでしょう。