【发布时间】:2011-05-19 17:36:51
【问题描述】:
我在这里遇到了一个小问题,我有这个函数指针:
typedef void* (* funcPointer)(const void *in, int ilen, void *out, int *olen)
还有这个功能
void* foo1(const void *in, int ilen, void *out, int *olen)
{
if(CONST_VALUE_1 > iLen)
//do something
else
//do something else
return whatever;
}
代码中的某处
// ...
funcPointer fpointer = foo1;
if(someArgument > SOME_OTHER_CONSTANT)
// where foo2 is the same as foo1 except that it uses CONST_VALUE_2
fpointer = foo2;
bar( someVariable, anotherVariable, fpointer);
// ...
如您所见,此函数的主体中有一个CONST_VALUE_X。我希望能够删除常量并改用第五个参数。由于我无法修改签名,所以我想知道是否有什么事情要做或使用 每个 可能的常量值复制粘贴函数...
谢谢
【问题讨论】:
-
您是否可以控制传递给回调函数的任何值?
-
你能把它包起来吗?为什么不创建一个采用第 5 个参数的基本函数,然后从尊重您签名的函数中传递 CONST_VALUE_X 来调用它?
-
@TurqMage 不,我对栏功能没有任何控制权
-
也许这个 C 中的柯里化实现可以提供一些线索:stackoverflow.com/questions/1023261/…
-
听起来你可以修改
foo1,但不能修改它的签名(因为它必须通过bar的函数指针调用,你不能改变bar)。那是对的吗?如果是这样,那么您可能应该定义一个带有额外参数的函数foo,然后让foo1用CONST_VALUE_1调用它,foo2用CONST_VALUE_2调用它。如果没有 C 所缺乏的某种形式的闭包或部分函数应用程序,这几乎是你能做到的最好的事情。