函数指向非
是否有可能使用函数指针指向非静态成员函数? 我想指出一个使用非静态对象和类的变量的成员函数...静态成员函数不能这样做...
我有一个成员函数指向四个静态成员函数之一。 问题是四个成员函数中的每一个都使用的数据是非静态的,所以静态成员函数将不会访问它们...
我可以指向非静态成员函数吗?
此外,类实例是一个指针...这是我的代码:
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'的非法引用
是的,只要您可以修改其存储的类型即可。
使用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
链接地址: http://www.djcxy.com/p/96353.html