将代码作为参数传递 (C++)

use*_*547 6 c++

我将如何将代码块传递给 C++ 中的函数。在 C# 中我可以做这样的事情:

void Example(Action action)
{
    action();
}

Example(() => {
    //do something
});
Run Code Online (Sandbox Code Playgroud)

非常感谢所有帮助和提示。

Les*_*Les 4

这是一个简单的入门示例......

void Example(void (*x)(void))
{
    x();
}
Run Code Online (Sandbox Code Playgroud)

电话将是...

Example([] { cout << "do something\n"; });
Run Code Online (Sandbox Code Playgroud)

这与您的 C# 示例非常相似。正如评论所暗示的那样,有更好、更通用的方法可以做到这一点。如果你想返回一个值并接受一个参数,你可以这样做......

int Example2(int (*y)(int i), int p)
{
    return y(p);
}
// ...
auto ret = Example2([](int p) -> int { cout << p << "\n"; return p; }, 2);
Run Code Online (Sandbox Code Playgroud)

这与 C# 版本类似,如下所示

int Example2(Func<int,int> y, int p)
{
    return y(p);
}
// ...
var ret = Example2((p) => { /*etc*/ return p; }, 2);
Run Code Online (Sandbox Code Playgroud)

  • 接受函数指针是极其有限的,这意味着您只能传递非捕获 lambda 或普通函数指针(=&gt; 没有绑定方法调用,只是为了举个例子)。您应该接受“std::function”。 (4认同)