没有任何参数的静态成员函数可以访问 class 的私有属性吗?
Can static member function without any argument access private attributes of a class?
我有以下(简体)ServerHandler.h 文件
#include <WebServer.h>
class ServerHandler
{
public:
ServerHandler();
void createServer();
static void handlePage();
private:
WebServer server;
};
和ServerHandler.cpp文件
#include "ServerHandler.h"
ServerHandler::ServerHandler() : server(80)
{}
void ServerHandler::createServer()
{
// this code does not work
server.on("/page", handlePage);
// lambda functions are proper to use
server.on("/hey", [this]() {
server.send(200, "text/plain", "Hello");
});
server.begin();
}
void ServerHandler::handlePage ()
{
server.send(200, "text/plain", "This is a page");
}
在WebServer.h中server.on()定义为:
typedef std::function<void(void)> THandlerFunction;
void on(const Uri &uri, THandlerFunction handler);
我只想编写一个免费的 function/static method/member 方法等用于称为 handlePage() 的长时间服务器操作。
问题是我不能使用像 pageHandler(Server s&)
这样的参数的静态函数,因为我不能在 server.on("/page", pageHandler(s));
中使用这个函数
此外,我不想在代码中使用 lambda 函数,因为我的目标是分离长操作。
简单来说,如何处理server.on("/page", ?);
?
感谢@hcheung,我了解到可以使用成员函数,我研究了如何做并找到了。
要求:
typedef std::function<void(void)> THandlerFunction;
void on(const Uri &uri, THandlerFunction handler);
要使用non-static成员函数需要使用绑定
mServer.on("/control_servo", std::bind(&ServerHandler::handlePage, this));
我有以下(简体)ServerHandler.h 文件
#include <WebServer.h>
class ServerHandler
{
public:
ServerHandler();
void createServer();
static void handlePage();
private:
WebServer server;
};
和ServerHandler.cpp文件
#include "ServerHandler.h"
ServerHandler::ServerHandler() : server(80)
{}
void ServerHandler::createServer()
{
// this code does not work
server.on("/page", handlePage);
// lambda functions are proper to use
server.on("/hey", [this]() {
server.send(200, "text/plain", "Hello");
});
server.begin();
}
void ServerHandler::handlePage ()
{
server.send(200, "text/plain", "This is a page");
}
在WebServer.h中server.on()定义为:
typedef std::function<void(void)> THandlerFunction;
void on(const Uri &uri, THandlerFunction handler);
我只想编写一个免费的 function/static method/member 方法等用于称为 handlePage() 的长时间服务器操作。
问题是我不能使用像 pageHandler(Server s&)
这样的参数的静态函数,因为我不能在 server.on("/page", pageHandler(s));
此外,我不想在代码中使用 lambda 函数,因为我的目标是分离长操作。
简单来说,如何处理server.on("/page", ?);
?
感谢@hcheung,我了解到可以使用成员函数,我研究了如何做并找到了。
要求:
typedef std::function<void(void)> THandlerFunction;
void on(const Uri &uri, THandlerFunction handler);
要使用non-static成员函数需要使用绑定
mServer.on("/control_servo", std::bind(&ServerHandler::handlePage, this));