繁体   English   中英

函数指针和默认参数

[英]Function pointer and default argument

假设我有一个带有原型的函数,例如(in function.h

void function(int argument, bool flag);

此功能有两种变体,取决于flag

早期,我在模块( module.hmodule.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提议之后,让我们复杂化。 boolfunction.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM