将一个函数作为另一个函数的参数传递而不在一行中使用除 std 之外的其他库的最快和最短的方法是什么?
我的意思是,假设我们有一个函数forloop(int x, *) {...}
,它运行一个 for 循环0
来x
运行该*
函数;函数调用应该是这样的:forloop(3, **() { std::cout "Hi!"; });
.
PS:*
并且**
只是逐个参数类型的占位符以及将函数作为参数传递的方式。
将一个函数作为另一个函数的参数传递而不在一行中使用除 std 之外的其他库的最快和最短的方法是什么?
我的意思是,假设我们有一个函数forloop(int x, *) {...}
,它运行一个 for 循环0
来x
运行该*
函数;函数调用应该是这样的:forloop(3, **() { std::cout "Hi!"; });
.
PS:*
并且**
只是逐个参数类型的占位符以及将函数作为参数传递的方式。
C++11 提供匿名函数:
forloop(3, []{ std::cout "Hi!"; });
示例:
#include <iostream>
#include <functional>
void forloop(int times, std::function<void()> f) {
for(int i = 0; i < times; i++) {
f();
}
}
int main() {
forloop(3, [] () { std::cout << "Hello world"; });
}
如果您的函数是任何类的成员,请尝试“指向成员函数的指针”。
您正在查看几个选项。
std::function
这是 C++ TR1 和 C++11 的一部分std::ptr_fun
调整您的功能您展示的语法仅适用于 C++11。早期的 C++ 版本不提供定义匿名函数的可能性。