我想创建一个函数,该函数返回一个函数,用于检查给定int
是否在某些范围内。
因此,返回的函数应该只接受一个参数int
,并返回bool
。这是必要的,因为返回的函数作为函数指针传递给另一个函数。到目前为止,我只能这样做:
bool valueIsInBounds(int value) { return value >= 0 && value <= 100; }
int main() {
functionThatTakesAFunction(&valueIsInBounds);
}
0
和100
显然是固定值,我想改变它。
我希望能做的是这样的事情:
??? functionGenerator(int min, int max) { ??? }
int main() {
functionThatTakesAFunction(&(functionGenerator(0, 100)));
}
我知道这在其他语言中是可行的,但我不知道如何在C中实现这一目标。
答案 0 :(得分:4)
对不起。正如评论所说,这可以不在便携式C中实现。
您必须自己生成一些程序集,以将参数(max
&amp; min
)绑定到函数指针。这被称为“蹦床”功能,并且存在多个库。这是一个:https://www.gnu.org/software/libffcall/trampoline.html
请查看此SO post以获得更好的解释以及使用上述蹦床库的示例。
答案 1 :(得分:4)
由于动态生成函数不能在C中完成,下一个最好的方法是参数化函数。
您可以将边界作为附加参数传递(如您的问题),或者您可以使用这些边界设置全局变量或静态变量。
bool valueIsInBounds(int value, int min, int max) { return value >= min && value <= max; }
int main() {
functionThatTakesAFunction(valueIsInBounds);
}
或:
int gMin, gMax;
void setBounds(int min, int max) { gMin= min; gMax= max; }
bool valueIsInBounds(int value) { return value >= gMin && value <= gMax; }
int main() {
setBounds(0, 100);
functionThatTakesAFunction(valueIsInBounds);
}