当前类的成员函数上的指针数组

时间:2017-04-04 11:26:16

标签: c++ arrays function-pointers member-function-pointers

我尝试创建一个当前类的成员函数指针数组,但暂时没有成功......

我已经尝试了很多东西,这是我的代码:

// Human.hpp

#include <iostream>

class Human
{
    private:
        void meleeAttack(std::string const & target);
        void rangedAttack(std::string const & target);
        void intimidatingShout(std::string const & target);
    public:
        void action(std::string const & action_name, std::string const & target);
};
// Human.cpp

#include "Human.hpp"

// ...

void    Human::action(std::string const & action_name, std::string const & target)
{
    std::string actionsStr[] = {"meleeAttack", "rangedAttack", "intimidatingShout"};

    typedef void (Human::*Actions)(std::string const & target);
    Actions actions[3] = {&Human::meleeAttack, &Human::rangedAttack, &Human::intimidatingShout};

    for (int i = 2; i >= 0; i--)
        if (actionsStr[i] == action_name)
        {
            actions[i](target); // there is an error HERE
            break;
        }
}

此代码在编译时生成错误:

main.cpp:41:23: error: called object type 'Actions' (aka 'void (Human::*)(const std::string &)') is not a function or function pointer
            actions[i](target);
            ~~~~~~~~~~^
1 error generated.

这样做的好方法是什么?

1 个答案:

答案 0 :(得分:6)

for (int i = 2; i >= 0; i--)
    if (actionsStr[i] == action_name)
    {
        (this->*(actions[i]))(target);
        break;
    }