[英]Function pointer and default argument
假设我有一个带有原型的函数,例如(in function.h
)
void function(int argument, bool flag);
此功能有两种变体,取决于flag
。
早期,我在模块( module.h
, module.c
)中调用了该函数:
#include "function.h"
function(argument1, true);
function(argument2, false);
让我们进一步假设,我想将此函数传递到模块中,将依赖关系反转:
void (* funcPtr)(int argument, bool flag);
void setFuncPtr(void (* func)(int argument, bool flag))
{
funcPtr = func;
}
现在我可以在function.c
:
#include "module.h"
setFuncPtr(function);
在module.h
:
funcPtr(argument1, true);
funcPtr(argument2, false);
有没有一种方法可以拥有两个指针,每个指针都指向该函数,但是具有不同的flag
硬编码值? 喜欢:
void (* funcPtrTrue)(int argument, bool flag);
void (* funcPtrFals)(int argument, bool flag);
/* Or, even better
void (* funcPtrTrue)(int argument);
void (* funcPtrFals)(int argument);
*/
void setFuncPtr(void (* func)(int argument, bool flag))
{
funcPtrTrue = func(argument, true);
funcPtrFalse = func(argument, false);
}
(我现在这不是正确的代码,但是应该说明所需的功能)
在Olis提议之后,让我们复杂化。 bool
是function.h
的typedef:
typedef enum {
FALSE,
TRUE
} bool;
现在,我必须包括function.h
再次module.c
,以使其能够工作。
#include "function.h"
void functionTrue(int argument)
{
fktPtr(argument, TRUE);
}
C没有默认参数。
我认为有充分的理由要使用两个单独的函数指针,而不是仅使用必需的flag
参数直接调用funcPtr
。 如果是这样,为什么不在模块内部只有两个包装器功能呢?
void (* funcPtr)(int argument, bool flag);
void setFuncPtr(void (* func)(int argument, bool flag)) {
funcPtr = func;
}
void funcTrue(int argument) { funcPtr(argument, true); }
void funcFalse(int argument) { funcPtr(argument, false); }
你可以使用结构
struct funcstruct {
void (*func)(int arg, bool flag);
bool default_flag;
} funcstruct;
struct funcstruct funcPtrTrue, funcPtrFalse;
void setFuncPtr(void (* func)(int argument, bool flag))
{
funcPtrTrue.func = func; funcPtrTrue.default_flag = true;
funcPtrFals.func = func; funcPtrFals.default_flag = false;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.