函数指向非

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

我有一个成员函数指向四个静态成员函数之一。 问题是四个成员函数中的每一个都使用的数据是非静态的,所以静态成员函数将不会访问它们...

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

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

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

上一篇: Function Pointer to a non

下一篇: When NOT to use the static keyword in Java?