【发布时间】:2014-04-29 06:47:53
【问题描述】:
我有不同的结构,我想编写一个通用框架来从 C 中的哈希表或这些结构的列表中获取元素的排序列表。例如,如果我有一个结构定义为
struct XYZ{
int a;
char b[20];
long time;
}
假设我有一个这种结构类型的元素列表。我需要一个功能,通过它我可以按结构的任何字段对该列表进行排序,并且该字段将由用户给出。这种用例也必须可用于其他此类结构,因此这种排序框架应该是通用的。我正在考虑使用某些脚本以不同的自动生成结构的形式存储与此结构相关的不同元数据。该元数据将存储与给定结构中每个元素相关的信息。此信息将包括结构的类型(即整数、字符串或日期:执行排序操作时不同的类型)以及访问结构中此元素的方法。现在我的问题是访问这些元素的理想方式应该是什么。一种直接的方法是为这些中的每一个生成一些 getter 函数,并在自动生成的元数据结构中设置 getter 函数的函数指针。但是拥有一个访问每个成员元素的 getter 函数将意味着每个元素访问的函数调用。这会阻止应用程序的性能吗?有没有其他方法可以做到这一点?也欢迎任何其他实现所需用例的框架想法。
【问题讨论】:
-
一般来说这是不可能的。解决它的正常方法是有一个排序函数(建议使用标准的
qsort函数)和一组比较器函数,结构中的每个成员一个函数。 -
那么这是否意味着我对每个结构的每个元素都有比较函数?
-
出于好奇:
char *b[20]是 20 个字符 指针,而不是最多 20 个字符的字符串。如果这是您的意图,那么您必须为结构的每个成员编写一个单独的qsort回调,如果不是,您可以使用offsetof+ 全局变量 + 通用回调 -
我的错。更正了它。谢谢!
标签: c pointers data-structures function-pointers