带有以基本泛型为参数的模板类的方法,可以接受带有泛型的模板类来扩展基本泛型的方法-有可能吗?

问题描述

我试图在ESP8266芯片上运行HTTP和HTTPS服务器。我将两个服务器都包装到我的自定义类中,希望方法_serveStaticResource成为HTTP和HTTPS服务器的“未找到”处理程序。库类WiFiServerSecure扩展了WiFiServer:

class WiFiServerSecure : public WiFiServer {...}

这是我的代码

void WebServer::begin() {
    _httpServer = new ESP8266WebServer(80);
    _httpServer->onNotFound([&]() -> void { _serveStaticResource((esp8266webserver::ESP8266WebServerTemplate<WiFiServer>*) _httpServer); });
    _httpServer->begin();

    _httpsServer = new ESP8266WebServerSecure(443);
    _httpsServer->getServer().setServerKeyAndCert_P(rsakey,sizeof(rsakey),x509,sizeof(x509));
    // !!!!!!! LINE BELOW !!!!!!!
    _httpsServer->onNotFound([&]() -> void { _serveStaticResource((esp8266webserver::ESP8266WebServerTemplate<WiFiServerSecure>*) _httpsServer); });
    _httpServer->begin();
}

void WebServer::_serveStaticResource(esp8266webserver::ESP8266WebServerTemplate<WiFiServer>* server) {
  String fileName = PUBLIC_DIR + server->uri();  
  if(fileName.endsWith("/")) fileName += INDEX_FILENAME;
  File file = SD.open(fileName.c_str());
  if(file) {
    if (file.isDirectory()) {
      server->send(404,"text/plain","");
    } else {
      String mediaType;
      if(fileName.endsWith(".html")) mediaType = "text/html";
      else if(fileName.endsWith(".css")) mediaType = "text/css";
      else if(fileName.endsWith(".js")) mediaType = "application/javascript";
      else if(fileName.endsWith(".json")) mediaType = "application/json";
      else mediaType = "text/plain";
   
      server->streamFile(file,mediaType)
    }
    file.close();
  }
}

在标有注释'// !!!!!!!的行上给出错误在下面!!!!!!!'。

sketch\WebServer.cpp: In lambda function:
WebServer.cpp:16:143: error: no matching function for call to 'WebServer::_serveStaticResource(esp8266webserver::ESP8266WebServerTemplate<BeaRSSL::WiFiServerSecure>*)'
     _httpsServer->onNotFound([&]() -> void { _serveStaticResource((esp8266webserver::ESP8266WebServerTemplate<WiFiServerSecure>*) _httpsServer); });
                                                                                                                                               ^
sketch\WebServer.cpp:16:143: note: candidate is:
In file included from sketch\WebServer.cpp:1:0:
sketch\WebServer.h:124:10: note: void WebServer::_serveStaticResource(esp8266webserver::ESP8266WebServerTemplate<WiFiServer>*)
     void _serveStaticResource(esp8266webserver::ESP8266WebServerTemplate<WiFiServer>* server);
          ^

当我按照以下方式更改标记的行时,它会编译,但是HTTPS服务器不会发送任何响应:

    _httpsServer->onNotFound([&]() -> void { _serveStaticResource((esp8266webserver::ESP8266WebServerTemplate<WiFiServer>*) _httpsServer); });

CPP的新手,请告知。谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)