Calling Member Function Pointers

帅比萌擦擦* 提交于 2019-12-10 10:12:54

问题


I am having trouble calling a function pointer inside a structure. I have used this approach before outside of classes, but now that I am trying it inside a class method using function pointers to other class methods.... I am receiving a compiler error. Here is my class:

class Myclass
{
    int i;

    void cmd1(int)
    {}

    void cmd2(int)
    {}

    void trans()
    {
        const struct
        {
            std::string cmd;
            void (Myclass::*func)(int)
        }
        CmdTable[] =
        {
            { "command1", &Myclass::cmd1 },
            { "command2", &Myclass::cmd2 }
        };

        CmdTable[0].func(i);
        CmdTable[1].func(i);
    }
};

The lines CmdTable[0].func(i); and CmdTable[1].func(i); both provide the following error: Error: expression must have (pointer-to-) function type.

I realize there are probably better ways of doing this, but I'm rather curious as to why what I've written doesn't work. Any explanation would be greatly appreciated.


回答1:


The pointer-to-member-function is a pure class property. You need to combine it with a class instance in order to make a meaningful function call. For example, to use the instance *this, you can use the operator ->* and say:

(this->*CmdTable[0])(i);

Or you can use operator .* on an object value:

(*this.*CmdTable[0])(i);

The latter form is always correct. For the former, note that operator->* may be overloaded and do something unrelated.



来源:https://stackoverflow.com/questions/25453259/calling-member-function-pointers

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!