В настоящее время я портирую GTK + на динамический язык, одна из задач состоит в том, чтобы преобразовать функции GTK + в привязки языка. Я пытаюсь использовать шаблоны C ++, чтобы упростить его.
Например, чтобы преобразовать 'gtk_widget_show_all' в 'show_all' динамического языка, я сначала определю следующую обобщенную функцию:
template<class Type, class GtkType, void function (GtkType*)>
static Handle<Value> SimpleMethod (const Arguments& args) {
GtkType *obj = blablabla...;
function (obj);
return Undefined ();
}
Тогда я могу очень легко связать 'gtk_widget_show_all' с 'show_all':
NODE_SET_PROTOTYPE_METHOD (constructor_template, "show_all", (SimpleMethod<Widget, GtkWidget, gtk_widget_show_all>));
Но когда функция GTK + становится более сложной, это было бы адом для определения каждого SimpleMethod для каждого типа функции GTK +, например:
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) {
...
}
Это станет довольно отвратительно. Есть ли хороший способ упростить эти функции до одной функции?