如何将一个函数作为函数参数传递给另一个函数?

How can i pass a function as a function parameter in another function?

我正在尝试使用 Arduino 库并将其中一个函数用作我自己的函数中的参数,但我不知道该怎么做。 我尝试了下面的代码,但出现错误。

我们将不胜感激。

P.S:我没有使用 auto 关键字的选项。

using namespace httpsserver;
HTTPServer Http;
typedef void (*Register)(HTTPNode*); // My typedef
Register Node = Http.registerNode;

当我尝试调用 Node (...) 时,出现以下错误。

Cannot convert 'httpsserver::ResourceResolver::registerNode'
from type 'void (httpsserver::ResourceResolver::)(httpsserver::HTTPNode*)' 
to type 'Register {aka void (*)(httpsserver::HTTPNode*)}'

如何为以下类型创建函数指针:

'void (httpsserver::ResourceResolver::)(httpsserver::HTTPNode*)'

我想在另一个函数中将其用作参数:

// My Declaration
void Get(void(*Register)(httpsserver::HTTPNode*), const std::string& path);

// Usage
Get (Http.registerNode(...), ""); // Like so

我该怎么做?

成员函数指针不是函数指针。

typedef void (httpsserver::*Register)(HTTPNode*); // My typedef
Register Node = &httpsserver::registerNode;

用法:

void Get(void(httpsserver::*Register)(httpsserver::HTTPNode*), const std::string& path);
Get (&httpsserver::registerNode, "");

您必须在 Get 内将 httpsserver::HTTPNode* 传递给 Register

如果你想将参数绑定到函数对象并稍后调用它,你需要 std::function<void()>:

void Get(std::function<void()>, const std::string& path);
Get ([&]{ Http.registerNode(...); }, "");

但是请注意,这会使上面 {} 中引用的对象的生命周期非常危险。