gpt4 book ai didi

c++ - 指向非静态成员函数的函数指针?

转载 作者:行者123 更新时间:2023-11-28 08:08:25 29 4
gpt4 key购买 nike

是否可以使用函数指针指向非静态成员函数?我想指出一个使用类中的非静态对象和变量的成员函数...静态成员函数不能这样做...

我有一个指向四个静态成员函数之一的成员函数。问题是四个成员函数中的每一个要使用的数据都是非静态的,因此静态成员函数将无法访问它们...

我可以指向非静态成员函数吗?

此外,类实例是一个指针...这是我的代码:

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;
}

上面抛出的错误是:error C2597: 非法引用非静态成员 'CRoutine::m_index'

最佳答案

是的,只要您可以修改它存储的类型。

使用 std::function 抽象你可以绑定(bind)到任何满足特定签名的东西(即接受 x 返回 y)。无论是仿函数、lambda、绑定(bind)成员函数还是自由函数。

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 一起使用

关于c++ - 指向非静态成员函数的函数指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9711756/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com