在这个例子中,如何将String传递给绑定的"处理程序"功能
// 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
答案 0 :(得分:2)
当你这样做时
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
答案 1 :(得分:0)
左撇子需要作为一元'&'操作数表示需要一个变量来获取地址。对于您的方法:
void begin(const char* uri)
{
m_server.on(uri, HTTP_GET, std::bind(&MyClass::handler(&path), this));
}
路径未定义 - 因此在这种情况下,路径不是可寻址变量。如上面的评论所述,@ Remy Lebeau,如果你传入param uri - 那么你有一个有效的可寻址变量。