gpt4 book ai didi

c - 具有可变条件的通用比较函数

转载 作者:行者123 更新时间:2023-11-30 17:43:24 26 4
gpt4 key购买 nike

我正在尝试使用该功能

List listFilter(List list , CompareFunction func);

众所周知,它会根据给定列表中的特定条件返回过滤后的列表;参数列表。

这是 CompareFunc 的定义:

typedef int (*CompareFunc)(ListElement);

ListElement 当然是 void* 。

我目前正在解决一个问题,其中 ListElement 是一个存储有关人的信息的对象,而该信息包括他们的年龄。

我正在尝试编写一个函数,根据年龄对给定的人员列表进行分组,这显然会有所不同,因此我正在尝试编写一个将 ListElement 与 int 进行比较的函数,即一个人的年龄与分别是一个年龄类别,假设它是这样定义的:

bool ageIsValid(ListElement person , int ageCategory);

并将其作为参数传递给 listFilter 。然而,我遇到的问题是CompareFunc的定义不是由我决定的,即我是ADT List的用户,所以我不能将ageIsValid直接传递给listFilter。

是否有不依赖全局变量的可用解决方案? ,因为在我目前正在学习的这个特定类(class)中,它是不受欢迎的。

所有答案将不胜感激:)

编辑:

我只是有一个想法,我想知道它是否可行:

我将定义一个静态函数,如下所示:

    static List listFilterCustom(List list , int age){
static bool filterByAge(ListElement element){
/* pAge = getAgeOfPerson(element); */
return pAge == age;
}
return listFilter(list , filterByAge);
}

即,我将在 listFilterCustom 范围内定义一个函数,其中识别变量 age,从而排除全局变量的使用。这个解决方案有效吗?

最佳答案

您必须修改listFilter;例如接受带有不透明指针的附加参数:

List listFilter(List list, CompareFunction func, void *info);

CompareFunction 必须进行相应修改以接受此 void * 指针。

您可以在此参数中传递其他信息(例如 &wanted_age_category)并将其转换回您的比较器中。

关于c - 具有可变条件的通用比较函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20242460/

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