如何将一个函数作为函数参数传递给另一个函数?
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(...); }, "");
但是请注意,这会使上面 {}
中引用的对象的生命周期非常危险。
我正在尝试使用 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(...); }, "");
但是请注意,这会使上面 {}
中引用的对象的生命周期非常危险。