我想传递大于(>)和小于(<)运算符作为函数的参数,怎么可能..有没有办法将这些运算符作为参数传递。请任何人都可以帮助我
答案 0 :(得分:2)
无法传递'原始'运算符,但有一些方法可以实现相同的结果。
最简单的是char
int func(char op, int a, int b)
{
if (op == '<')
{
return a < b;
}
else if (op == '>')
{
return a > b;
}
return -l; /* error */
}
更复杂的解决方案是使用函数指针来执行操作的函数(类似于sort方法使用的比较器)。
答案 1 :(得分:2)
您可以创建枚举并传递它。 或者你可以传递指向比较函数的指针,如下所示:
#include <stdio.h>
int max(int a, int b, int (*comp)(int, int)) {
if (comp(a, b) < 0) {
return b;
} else {
return a;
}
}
int mycomp(int a, int b) {
return a < b ? -1 : 1;
}
int main() {
printf("%d %d\n", max(1, 2, mycomp), max(2, 1, mycomp));
}
答案 2 :(得分:1)
你可以用宏做一些可怕的事情,但总的来说,不,你不能这样做。您通常接受两个参数函数并调用它,该函数可以根据需要使用>
或<
,请参阅the sort
docs以获取示例。
也就是说,它不是超级高效的(通过指针调用函数不能内联,对于像>
或<
这样的廉价操作,函数调用开销超过了比较工作)。提高效率需要: