我设置了一个ESP8266 Web服务器。没有在类中组织我的代码,这非常有效。我可以告诉我的Web服务器实例它应该在特定的URI上调用它的方法:
ESP8266WebServer server(80);
void handleRoot(){ // do sth}
server.on("/root", handleRoot)
但是,现在我想重构我的代码,隐藏对象中更复杂的操作并仅对这些对象进行操作。不幸的是,我无法将类功能设置为处理程序功能。它适用于静态方法,但这没有帮助,因为我无法引用我的对象的变量。我不想让服务器变量成为静态变量。 有可能的解决方案吗?或者你将如何以一种很好的方式实现它。
标题文件:
#include <ESP8266WebServer.h>
class my_WebServer
{
ESP8266WebServer* server;
public:
my_WebServer();
void setup();
void handleRoot1(ESP8266WebServer* server);
static void handleRoot1(ESP8266WebServer* server);
};
.cpp文件:
//Constructor
my_WebServer::my_WebServer(){
server = new ESP8266WebServer(80);
setup();
}
void my_WebServer::handleRoot1(){
// do sth
server->send(404, "text/plain", "random text);
}
void my_WebServer::handleRoot2(){
// do sth
server->send(404, "text/plain", "random text); //does not work, as "server" is not avaliable in static method
}
void my_WebServer::setup(){
server->on("/root1", server->handleRoot1); // does not work
server->on("/root2", ESP8266WebServer::handleRoot2); // works
}