В этом примере, как вы передаете строку в связанную функцию-обработчик?
// MyClass.h
class MyClass {
public:
MyClass(ESP8266WebServer& server) : m_server(server);
void begin();
void handler(String path);
protected:
ESP8266WebServer& m_server;
};
// MyClass.cpp
...
void MyClass::begin() {
String edit = "/edit.htm";
m_server.on("/edit", HTTP_GET, std::bind(&MyClass::handleFileRead(edit), this));
...
Каждый способ, которым я пытаюсь, я получаю:
error: lvalue required as unary '&' operand
Когда вы делаете
std::bind(&MyClass::handleFileRead(edit), this)
вы пытаетесь вызов MyClass::handleFileRead(edit)
и возьмите указатель результата в качестве аргумента std::bind
вызов. Это, конечно, неверно, тем более что функция ничего не возвращает, а не static
функция-член ..
Вы не должны вызов функция, просто передайте на нее указатель (и установите аргумент):
std::bind(&MyClass::handleFileRead, this, edit)
// ^ ^
// Note not calling the function here |
// |
// Note passing edit as argument here
lvalue требуется как одинарный&операнд говорит, что переменная требуется для получения адреса. В случае вашего метода:
void begin(const char* uri)
{
m_server.on(uri, HTTP_GET, std::bind(&MyClass::handler(&path), this));
}
путь не определен — поэтому в этом случае путь не является адресуемой переменной. Как уже упоминалось в комментарии выше, @Remy Lebeau, если вы передадите параметр uri — тогда у вас будет допустимая адресуемая переменная.