接受lambda函数和函数指针作为参数

时间:2016-11-11 18:40:43

标签: c++ function lambda function-pointers

我有一个功能,让我们说

void processSomething(Arg1 arg1, Function t){
    ...
    t(someVariable);
}

我希望以下两种用法都有效:

processSomething(myArg1, [&](SomeVariable someVar){...});
void(*myFunc)(void) = &someFunc;
processSomething(myArg1, myFunc);

但是,我发现在使用void(*myFunc)(void)作为参数声明时我不能使用lambda-way。 没有两个单独的函数或过于复杂的包装器使用这两种用法的方法吗?

1 个答案:

答案 0 :(得分:6)

嗯,你有两个选择:

  1. 模板:

    template<class F>
    void processSomething(Arg1 arg1, F t){
    

    这是首选方法,因为它可以创建更高效​​的代码,但代价是可能的代码重复。

  2. 使用std::function或类似内容:

    void processSomething(Arg1 arg1, std::function<void(SomeVariable)> t){
    

    所涉及的间接费用的运行成本,但在每种情况下都会使用相同的代码。