GTK+ または GTKMM を学ぶべきですか?

私は gtkmm への貢献を支援しているので偏見で非難される可能性がありますが、私はもともとユーザーだったので... いずれにしても、C++ に慣れている場合は gtkmm を強くお勧めします。参照カウントされたオブジェクトはスマート ポインターで自動的に管理されるため、メモリ管理は GTK+ よりも gtkmm の方がはるかに簡単です。また、オブジェクトを auto 変数として (スタック上などで) インスタンス化し、その有効期間をスコープによって決定することもできます。したがって、実際には、GTK+ よりも gtkmm の方がメモリ リークを回避する方がはるかに簡単です。

別の巨大な GTK+ に対する gtkmm の利点 (私の意見では) は、タイプ セーフなシグナル フレームワークを使用していることです。 GTK+ では、何かを常に void ポインターとして渡し、それらを本来あるべき型にキャストする必要があります。 gtkmm では、これを行う必要はなく、シグナル ハンドラーに型安全性を適用するコンパイラを利用できます。

C/GTK+ に対するもう 1 つの大きな利点は、新しいクラスを簡単に派生できることです。 GTK+ では、多くのボイラープレート コードを記述し、基本的に言語の一部として C++ で無料で入手できるものを再実装する必要があります (継承、コンストラクタ、デストラクタなど)。これはより面倒で、エラーが発生しやすくなります。

grayfade は gtkmm が不完全であると述べましたが、彼はある程度正しいです -- gtkmm は GTK+ API のすべてを完全にカバーしているわけではありません (非常に近いものですが)。しかし、実際にはこれは問題ではありません。なぜなら、いつでも gtkmm コードから直接 C/GTK+ API を使用できるからです。この C 互換性は、バインディングが API の一部をカバーしていない場合に代替手段がない C# や python バインディングのようなものに対する C++ の大きな利点です。

gtkmm (IMO) よりも GTK+ を選択する唯一の本当の理由は、gtkmm は C ライブラリのラッパーであるため、オーバーヘッドが少し増えることです (ただし、これは通常、単一の関数呼び出しであり、影響はほとんどありません)。 、または C++ が嫌いまたは使用できない場合。


あなたが C# プログラマーなら、Vala に目を向けてみませんか?

Linux GUI アプリケーションのほとんどで pygtk を使用していますが、現在取り組んでいるプロジェクトには Python が遅すぎるため、GTK+ と GTKmm のいずれかを選択しようとしていました。それから私はヴァラに会いました。

これはかなり新しい言語であるため、現時点ではドキュメントがかなり限られていますが、C# の構文と C の速度という両方の長所を備えていると思います。


C++ の方が馴染みがあり、RAII のようなイディオムを使用できるため、GTKmm の方が適していると思われるかもしれません。残念ながら、GTKmm は少し不完全であり、GTK のあまり使用されない部分がいくつか欠けています。

ただし、GTK+ 自体は、基本的に C++ で見られるものと同様のオブジェクト モデルを公開しますが、C 関数のみを使用します。 C++ での構築や破棄などは C API で明示的に行われ、ウィジェットのインスタンスはポインターのみを介して処理されます。

両方を試して、どちらがプロジェクトに適しているかを確認してください。