我认为像JS这样的新语言本身可以做到这一点,但是我忘记了它的术语(在线创建一个“临时”函数只是作为回调传递)
我想做的是......
我正在编写单元测试,我设置了预期的输入和放大器。在编译时输出消息。稍后在运行时,我想在接收到每个输出或处理输入时进行一些检查,因此我为回调函数添加了一个参数。
这工作正常,我可以留下它&继续,但......我只是好奇......
有时功能过度,我只需要一次比较;有时会有一小段代码。也许我可以在运行时将这些值评估为零/非零值?但是如何作为参数传递?
目前我的功能有以下签名
void AddExpectedCommand(E_peripheralType peripheral,
communicationBlock_t commandBlock,
errorMessage_t errorMessage,
void *(*DoRunTimeChecks)(E_boolean));
其中final参数是指向返回boolean的回调函数的指针。
有没有办法可以将代码表达式作为参数传递?
或者功能看起来“更干净”吗?
提前感谢您的帮助......
更新:哎呀,我说错了。我想传递一个指针,这样一个没有参数的函数并返回一个e_Boolean ...我该怎么做?
答案 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)