您可以使用boost::function<>对象进行操作.这样您就不需要任何模板,按钮类变得非常灵活:
struct Button {
typedef boost::function<void ()> action_t;
action_t action;
Button(const action_t &a_action) : action(a_action) {
}
void click() {
action();
}
};
Run Code Online (Sandbox Code Playgroud)
这样,类很容易使用函数指针,仿函数对象或boost :: bind之类的东西:
void dosomething();
Button b1 = Button(&dosomething);
struct SomeAction {
void operator()() {}
};
Button b2 = Button(SomeAction());
Run Code Online (Sandbox Code Playgroud)