如何在函数的参数内定义函数,该函数将函数作为参数

时间:2014-07-07 14:09:56

标签: c++

#include <iostream>
void print(void func(int)){
  func(6);
}
int main(){
  print(void ext(int r){
  std::cout<<r;
  });
  return 0;
}

我想在参数内部定义一个函数,而不是在其他地方定义它并使用其名称作为参数。就像在javascripts中一样。

2 个答案:

答案 0 :(得分:6)

在C ++ 11或更高版本中,您可以使用lambda:

执行此操作
print([](int r){std::cout << r;});

由于print采用普通函数指针,因此你只限于像这样的简单无状态lambda;你无法捕获任何东西。您可能希望通过使用模板的多态性为其提供更大的灵活性:

template <typename Function>
void print(Function func) {
    func(6);
}

或输入删除:

void print(std::function<void(int)> func) {
    func(6);
}

答案 1 :(得分:3)

使用C ++ 11中的两个新功能非常简单:std::functionlambda expressions

void print(std::function<void(int)> func)
{
    func(6);
}

int main()
{
    print([](int r){ std::cout << r; });
}

使用std::function,您可以使用任何可调用对象,而不仅仅是lambda表达式。

例如:

// The `print` function as above

void print_num(int r)
{
    std::cout << r;
}

int main()
{
    print(print_num);
}

或者

// The `print` function as above

struct printer
{
    void operator()(int r)
    {
        std::cout << r;
    }
};

int main()
{
    print(printer());  // Creates a temporary object
}