从类方法回调(C++)

问题描述:

我有一个Button类。 当我点击这个按钮时,它被选中()方法被调用。从类方法回调(C++)

//Button.cpp 
void Button::selected(){ 
//Do Something 
} 

//Player.cpp 
void Player::Jump(){ 
//Jump! 
} 

我也有一个播放器类。 我想这样做,当我点击按钮时,播放器方法的跳转() 被调用。我想我可以将播放器类与按钮连接起来。 但后来我意识到,按钮类将有许多其他用途,而不是让我的玩家跳跃 。 (即:菜单选择器?使播放器移动?等)

所以我想包括某种回调,但我不太熟悉他们,我无法理解一些教程我已阅读。

有人能告诉我如何使用selected()方法将任何函数/方法作为参数并在方法体中执行它?

在这里你将一个函数作为参数仿函数的方法:

template <typename functor_t> 
void Button::selected(functor_t func){ 
    // ... 
    func(); 
    // ... 
} 

这个参数可以是一个函数指针或函数对象:

struct functor { 
    void operator()() { 
    // stuff 
    } 
}; 

void function() { 
    // stuff 
} 

使用指针调用void method()成员:

struct foo { 
    void bar() { 
    std::cout << "hello"; 
    } 
}; 

template <typename class_t> 
void function(class_t& c, void (class_t::* mp)()) { 
    (c.*mp)(); 
} 

foo x; 
function(x, &foo::bar); 
+3

对于大多数情况,我们有'std :: function'和'std :: bind'。 –