将代码作为函数参数传递,而不是声明回调

时间:2012-03-24 02:38:51

标签: c callback

我认为像JS这样的新语言本身可以做到这一点,但是我忘记了它的术语(在线创建一个“临时”函数只是作为回调传递)

我想做的是......

我正在编写单元测试,我设置了预期的输入和放大器。在编译时输出消息。稍后在运行时,我想在接收到每个输出或处理输入时进行一些检查,因此我为回调函数添加了一个参数。

这工作正常,我可以留下它&继续,但......我只是好奇......

有时功能过度,我只需要一次比较;有时会有一小段代码。也许我可以在运行时将这些值评估为零/非零值?但是如何作为参数传递?

目前我的功能有以下签名

void AddExpectedCommand(E_peripheralType peripheral, 
                        communicationBlock_t commandBlock, 
                        errorMessage_t errorMessage, 
                        void *(*DoRunTimeChecks)(E_boolean));

其中final参数是指向返回boolean的回调函数的指针。

有没有办法可以将代码表达式作为参数传递?

或者功能看起来“更干净”吗?

提前感谢您的帮助......


更新:哎呀,我说错了。我想传递一个指针,这样一个没有参数的函数并返回一个e_Boolean ...我该怎么做?

2 个答案:

答案 0 :(得分:2)

您正在寻找的是“lambda表达”或“匿名函数”。它们不存在于C中(但在C ++中具有某些资格)。

答案 1 :(得分:2)

使用C ++ 11,您可以执行以下操作:

使用返回bool的函数的函数:

 void f(function<bool()>);

使用捕获局部变量的lambda调用它:

 int x = ...;

 f([&x]() { return (x > 2); });

或者用一些返回bool的函数g调用它:

bool g();


f(g);

或绑定一些带有int的函数h并返回一个bool:

bool h(int x);


f(bind(h, 2));  // ie creates a nullary function from h(2)