我可以在C中使用仿函数吗?

The*_* do 0 c c++

我可以在C中使用仿函数吗?我的意思是例如在C++中我可以这样做:

struct Rules
{

    operator()(/*maybe some args*/)
    {
    }
};
Run Code Online (Sandbox Code Playgroud)

一些(虚构的)算法:

int sort(iter beg, iter end, Rules);
Run Code Online (Sandbox Code Playgroud)

我可以在C中做同样的事吗?

Ada*_*ght 7

不一样,没有.C不支持结构的成员函数,也不支持运算符重载.

但是,您可以传递和存储函数指针.您可以sort使用比较函数指针获取结构,并调用传递的函数.有关示例,请参阅qsortC标准库...

qsort(void *base, size_t nel, size_t width, int (*compar)(const void *, const void *));
Run Code Online (Sandbox Code Playgroud)

最后一个参数是一个排序比较函数指针.你可以创建一个结构,如...

struct Rules_t
{
  int (*comparisonRule)(const void *, const void *);
} Rules;
Run Code Online (Sandbox Code Playgroud)

然后传递这个结构的实例围绕调用,例如myRules->comparisonRule(a, b).