Cで高階関数を実装するための「適切な」方法はありますか。
ここでの移植性や構文の正確さなど、および長所と短所が複数あるかどうかについては、ほとんど興味があります。
編集:高階関数を作成する方法を知りたい理由は、PyObjectリスト(Pythonスクリプトを呼び出すときに取得する)を同じデータを含むが、そうではない方法で編成されたC構造体のリストに変換するシステムを作成したためです。 python.hライブラリに依存します。したがって、私の計画では、pythonicリストを反復処理し、リスト内の各項目で関数を呼び出し、結果をリストに配置して、それを返す関数を作成します。
これが基本的に私の計画です。
typedef gpointer (converter_func_type)(PyObject *)
gpointer converter_function(PyObject *obj)
{
// do som stuff and return a struct cast into a gpointer (which is a void *)
}
GList *pylist_to_clist(PyObject *obj, converter_func_type f)
{
GList *some_glist;
for each item in obj
{
some_glist = g_list_append(some_glist, f(item));
}
return some_glist;
}
void some_function_that_executes_a_python_script(void)
{
PyObject *result = python stuff that returns a list;
GList *clist = pylist_to_clist(result, converter_function);
}
そして質問を明確にするために:私はこれをより安全でより正確なCで行う方法を知りたいです。私は本当に高階関数のスタイルを維持したいのですが、それが嫌いなら私はこれを他の方法で行う方法を大いに感謝します。