我想将一个类方法(绑定到一个对象)传递给一个库中的函数,该函数要求对一个可调用的非const引用 .
如果没有通过引用询问参数,它将与std :: bind完美配合 . 我不知道为什么通过引用询问它,我无法改变它 .
有没有办法让std :: bind的结果成为左值?或者我应该重做一切吗?
这是一个显示问题的代码:
#include
#include
#include
using namespace std::placeholders;
// code in a lib that i cannot change
class Agent {
public:
template
void register_handler(functor & f) {
// f is stored in data member "functor & f_;" of connection_event_generic_dispatcher in initializer list of ctor.
std::auto_ptr<:connection_event_dispatcher_base> monitor(new details::connection_event_generic_dispatcher(f));
pimpl_base_->register_connection_event_monitor(monitor);
}
};
// code i can edit
class PersistentConnection {
public:
PersistentConnection(): data_member_("world") {
agent_.register_handler(std::bind(&PersistentConnection::internal_handler, this, _1));
}
private:
void internal_handler(std::string message) {
std::cout << message << " " << data_member_ << std::endl;
}
std::string data_member_;
Agent agent_;
};
int main (int argc, char** argv) {
PersistentConnection p;
return 0;
}
编译命令行和错误:
clang --std = c 11 /tmp/test.cpp -o / tmp / test /tmp/test.cpp:20:10:错误:没有匹配的成员函数来调用'register_handler'agent_.register_handler(std :: bind(&PersistentConnection :: internal_handler,this,_1)); ~~~~~~~ ^ ~~~~~~~~~~~~~~~~ / tmp / test.cpp:10:7:注意:候选函数[有functor = std :: _ Bind)>(PersistentConnection) *,std :: _ Placeholder <1>)>]不可行:期望第一个参数的l值为void register_handler(functor&f){^ 1生成错误 .