是否可以使用函数指针指向非静态成员函数?我想指出一个使用非静态对象和类中的变量的成员函数...静态成员函数不能这样做...
我有一个成员函数,指向四个静态成员函数之一。问题是四个成员函数中每个成员函数使用的数据都是非静态的,因此静态成员函数不会访问它们......
我可以指向非静态成员函数吗?
此外,类实例是一个指针......这是我的代码:
class CRoutine{
int m_index;
...
BOOL (*CallRoutine(char opcode))(DWORD, float, float, float);
static BOOL Update(DWORD, float, float, float);
static BOOL Transition(DWORD, float, float, float);
static BOOL Revert(DWORD, float, float, float);
static BOOL Sequence(DWORD, float, float, float);
...
};
BOOL (*CRoutine::CallRoutine(char opcode))(DWORD, float, float, float)
{
switch ( opcode )
{
case 0:
return &CRoutine::Update;
case 1:
return &CRoutine::Transition;
case 2:
return &CRoutine::Revert;
case 3:
return &CRoutine::Sequence;
default:
return &CRoutine::Update;
}
}
BOOL CRoutine::Update(DWORD AnimSetIndex, float time, float tTime, float shift)
{
MessageBox(NULL, L"Updating", L"Routine #1", MB_OK);
CRoutine::m_index++; // Error thrown here...
return true;
}
BOOL CRoutine::Transition(DWORD AnimSetIndex, float time, float tTime, float shift)
{
MessageBox(NULL, L"Transitioning", L"Routine #2", MB_OK);
return true;
}
BOOL CRoutine::Revert(DWORD AnimSetIndex, float time, float tTime, float shift)
{
MessageBox(NULL, L"Reverting", L"Routine #3", MB_OK);
return true;
}
BOOL CRoutine::Sequence(DWORD AnimSetIndex, float time, float tTime, float shift)
{
MessageBox(NULL, L"Sequencing", L"Routine #4", MB_OK);
return true;
}
上面抛出的错误是: 错误C2597:非法引用非静态成员'CRoutine :: m_index'
答案 0 :(得分:1)
是,只要您可以修改其存储类型。
使用std :: function摘要,您可以绑定到满足特定签名的任何内容(即取x返回y)。无论是算子,lambda,绑定成员函数还是自由函数。
struct bar{
void foo(){
std::cout << "HI" << std::endl;
}
};
int main(){
bar b;
//using std::function instead of a func*
std::function<void()> func(
std::bind(&bar::foo, &b));
func();
}
注意使用std :: function需要C ++ 11,boost也有一个非常类似的版本,可以与C ++ 98一起使用