是否有一种“正确”的方法可以在 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 语言中做到这一点。我真的很想保持高阶函数风格,但如果不赞成,我非常感谢以其他方式做到这一点的方法。