2012-11-24 197 views
1

传递函数作为另一个函数的参数的最快和最短的方法是什么,而不是在一行中使用除std之外的其他库?如何传递函数作为参数?

我的意思是让我们说我们有一个功能forloop(int x, *) {...}运行for循环从0x运行*功能;函数调用应该是这样的:forloop(3, **() { std::cout "Hi!"; });

PS:***是用于功能逐参数类型和传递函数作为参数的方式只是占位符。

+0

你应该使用['for_each'](http://en.cppreference.com/w/cpp/algorithm/for_each)。 –

回答

2

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"; }); 
} 
+0

'*'的类型是什么? – Shoe

+0

@Jeffrey类型是'的std ::功能' - 包括 phant0m

+0

@ phant0m:不,这将是** **转换成'的std ::功能'。它的确切类型是不确定的,但可以通过获得'decltype' –

0

如果您的函数是任何类的成员,请尝试“指向成员函数”。

0

您正在看的几个选项。

  1. 函数指针,这是std::ptr_fun C++ TR1的一部分,C++ 11
  2. 使用仿函数和适应你的函数

语法你是示出C形风格的方式

  • std::function只会使用C++ 11。早期的C++版本不提供定义匿名函数的可能性。

  • +0

    我没有使用任何语法,我只是发明了它。什么将'*'和'**'替换(如果我有C++ 11)? – Shoe