gtkmmはGTK+のC++ラッパーであり、グラフィカルユーザーインターフェイスを作るためのライブラリです。LGPLライセンスで提供されているので、フリーソフトウェアやオープンソースソフトウェア、さらにはフリーでない商用ソフトウェアをライセンスを購買することなしにgtkmmで開発することができます。
gtkmmは元々gtk--と名付けられました。これはGTK+には既に+記号が使われていたからです。ところが、--は検索エンジンにうまくインデックス化されないので、そのパッケージ名は一般的にgtkmmとなり、これが定着しました。
gtkmmでは通常のC++のテクニックとして、カプセル化や継承、多態性などを使うことができます。C++プログラマならば、これがコードをより簡潔で整理されたものすることが分かるはずです。
gtkmmはタイプセーフなので、Cなら実行時にしか見つからないようなエラーをコンパイル時に検出することができます。加えて、特定の型を使うことでAPIはより明快になりますから、どの型を使うべきかという問題もメソッドの定義を見るだけで分かるようになります。
新しいウィジットを作るときには継承が使われます。GTK+のCではこれは複雑すぎてエラーの温床になるので、行う人は滅多にいません。C++開発者ならば、継承はオブジェクト指向に欠かせない技術だと知っています。
インスタンス変数はメモリ管理を簡単にするために使われます。GTK+のCによるウィジットはこれをポインタの使用で実現しています。C++プログラマならば、ポインタはできるだけ避けるべきだと知っているはずです。
gtkmmではGTK+と比較して少ない量のコードで済みます。GTK+ではプレフィクスのついた関数と多くのキャスト用マクロを使用するからです。
TrolltechのQtはgtkmmに最も近い競争相手です。そのため様々な議論があります。
gtkmm開発者がQtよりもgtkmmを好む理由として、gtkmmではよりC++流のやり方で出来るということがあります。Qtのオリジナル版は、まだC++とその標準ライブラリが標準化されず、コンパイラのサポートも少ない時期に開発されました。それゆえコンテナや型情報などは既に標準ライブラリに入っているにも関わらず、Qtの複製物が存在しています。最も重要な違いは、TrolltechがC++を改変してシグナルをサポートしたというところです。このため、Qtのクラスを非Qtのクラスと共に使うことは簡単にはできません。gtkmmではC++を改変することなくシグナルを提供しているので標準のC++を使うことができます。もっと詳しい違いについてはFAQを参照してください。
gtkmmはネイティブのC++ツールキットではなく、Cツールキットのラッパーです。このようにインターフェイスと実装を分離することには利点があります。gtkmmの開発者は最も美しいAPIをgtkmmでどのように提供するかということに専念し、あやふやな技術上の細部に妥協しなくて済みます。私たちは基礎にあるGTK+のコードにいくらかは貢献していますが、それはCでの開発者や、Perlでの開発者、Pythonやその他の言語における開発者たちも行っています。ですから、GTK+は一つの言語に特化したツールキットに比べてより幅広いユーザーに利益をもたらします。ここには実装者、開発者、テスター、ユーザーが沢山いるのです。
MicrosoftのMFCではGUIのラッパーにひどい名前をつけています。gtkmmは同じ問題に悩むことがありません。GTK+はクオリティの高いオブジェクト指向なCにより、他言語によるバインディングがあることに注意して製作されているからです。