gpt4 book ai didi

c - C 中的高阶函数

转载 作者:太空狗 更新时间:2023-10-29 16:30:19 33 4
gpt4 key购买 nike

在 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 中做到这一点。我真的很想保持高阶函数风格,但如果不赞成这样做,我非常感谢其他方法方式。

最佳答案

从技术上讲,高阶函数只是接受或返回函数的函数。所以像 qsort 这样的东西已经是高阶的了。

如果您的意思更像是函数式语言中的 lambda 函数(这是高阶函数真正有用的地方),那么这些函数要难得多,并且不能在当前的标准 C 中自然地完成。它们只是不是语言的一部分。 Apple 的 blocks extension 是最好的选择。它只适用于 GCC(和 LLVM 的 C 编译器),但它们确实很有用。希望这样的事情会流行起来。以下是一些相关资源:

关于c - C 中的高阶函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2535631/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com