如何将类成员函数作为Handler函数传递

时间:2017-04-18 18:06:55

标签: c++ esp8266

ESP8266 WiFi板上的

我设置了一个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
}

相关信息: 类索引:https://links2004.github.io/Arduino/index.html

0 个答案:

没有答案