私は現在GTK +を動的言語に移植していますが、GTK +関数を言語バインディングに変換することが課題の1つです。私はC++テンプレートを使ってそれを単純化しようとしています。ノンタイプのテンプレートパラメータとしての関数ポインタ
例えば、動的言語の「SHOW_ALL」から「gtk_widget_show_all」を変換するために、私は最初に、一般的な機能以下の定義:
template<class Type, class GtkType, void function (GtkType*)>
static Handle<Value> SimpleMethod (const Arguments& args) {
GtkType *obj = blablabla...;
function (obj);
return Undefined();
}
その後、私は非常に簡単に「SHOW_ALL」から「gtk_widget_show_all」をバインドすることができます。
は、NODE_SET_PROTOTYPE_METHOD (constructor_template, "show_all", (SimpleMethod<Widget, GtkWidget, gtk_widget_show_all>));
しかし、GTK +の機能がより複雑になったとき、それはこのように、GTK +機能のすべての種類ごとSimpleMethodを定義するための地獄のようになります。
template<class Type, class GtkType, void function (GtkType*, const char *)>
static Handle<Value> SimpleMethod (const Arguments& args) {
...
}
template<class Type, class GtkType, void function (GtkType*, int)>
static Handle<Value> SimpleMethod (const Arguments& args) {
...
}
template<class Type, class GtkType, int function (GtkType*)>
static Handle<Value> SimpleMethod (const Arguments& args) {
...
}
template<class Type, class GtkType, void function (GtkType*, const char *, const char *)>
static Handle<Value> SimpleMethod (const Arguments& args) {
...
}
かなり嫌になる。これらの関数を1つの関数に単純化する良い方法はありますか?
C++を使用している場合は、GTK + [gtkmm](http://www.gtkmm.org/en/)に既存のC++ラッパーを使用しないのはなぜですか? –
@ another.anon.coward gtkmmは多くのC++機能を追加しますが、GTK +は他の言語にバインドされるように設計されています。 – fool