假设,我有一个原型函数,如 (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 enum {
FALSE,
TRUE
} bool;
现在我必须function.h
再次包含module.c
以使其再次工作。
#include "function.h"
void functionTrue(int argument)
{
fktPtr(argument, TRUE);
}