class Action {
public:
void operator() () const;
}
class Data {
public:
Data();
~Data();
Register(Action action) { _a = action; }
private:
Action _a;
}
class Display {
public:
Display(Data d) { d.Register( bind(Display::SomeTask, this, _1) ); }
~Display();
void SomeTask();
}
我想将 Data 的私有(private)成员 _a 绑定(bind)到 Display 的成员函数,但是当我调用 d.Register 时出现编译错误,说我的参数类型不匹配,我做错了什么?谢谢。
最佳答案
您尝试做的事情并不完全清楚,但我假设“绑定(bind)”是 boost::bind(或 tr1::bind)。
bind(Display::SomeTask, this, _1) 的几个问题:
- 应该是 &Display::SomeTask
- _1 占位符没有意义,因为它创建了一个一元函数对象并且:
- Display::SomeTask 不带参数
- Action::operator() 不接受任何参数
使用 Boost.Function 和 Boost.Bind,您可以编写以下内容来实现我猜您正在尝试做的事情:
typedef boost::function<void(void)> Action;
class Data {
public:
Data();
~Data();
Register(Action action) { _a = action; }
private:
Action _a;
};
class Display {
public:
Display(Data d) { d.Register( bind(&Display::SomeTask, this) ); }
~Display();
void SomeTask();
};
关于c++ - 将可调用对象传递给成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1239380/