试图将String传递给绑定函数C ++

时间:2017-03-01 18:11:24

标签: c++ arduino arduino-esp8266

在这个例子中,如何将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

2 个答案:

答案 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 - 那么你有一个有效的可寻址变量。