【发布时间】:2016-08-16 20:08:32
【问题描述】:
我有一个函数指针的 typedef,我正在尝试创建一个函数指针并让它指向同一个类的成员函数:
typedef void(Controls::*KeyFunction)(void);
class Controls
{
public:
void OnKeyDown(Key key);
// Key Down Functions
void KeyLeftDown();
void KeyRightDown();
void KeyDownDown();
void KeyUpDown();
private:
static BOOL KeyEvent(LPARAM keyFunc, WPARAM null, UINT flags);
};
void Controls::OnKeyDown(Key key)
{
KeyFunction kFunc;
switch (key)
{
case Key::Left:
kFunc = KeyLeftDown;
break;
case Key::Right:
kFunc = KeyRightDown;
break;
case Key::Up:
kFunc = KeyUpDown;
break;
case Key::Down:
kFunc = KeyDownDown;
break;
default:
return;
}
SendKeyEvent(kFunc, DO_NOT_REMOVE);
}
BOOL Controls::KeyEvent(LPARAM keyFunc, WPARAM null, UINT flags)
{
KeyFunction func = (KeyFunction)(keyFunc);
func();
return TRUE;
}
使用 typedef 'KeyFunction' 总是给出错误的表达式必须是可修改的左值。但是,如果我只是使用定义本身并跳过 typedef 它可以工作.. 例如:
void(Controls::*kFunc)(void);
switch (key)
{
case Key::Left:
kFunc = KeyLeftDown;
break;
}
完全有效??? 我做错了什么?
谢谢
【问题讨论】:
标签: c++ function-pointers typedef member-function-pointers