当前类的成员函数的指针数组
Posted
技术标签:
【中文标题】当前类的成员函数的指针数组【英文标题】:Array of Pointers on Member functions of current class 【发布时间】:2017-04-04 11:26:16 【问题描述】:我尝试创建当前类的成员函数指针数组,但目前没有成功...
我已经尝试了很多东西,这是我的代码:
// 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.
有什么好的方法吗?
【问题讨论】:
指向非成员函数的指针和指向成员函数的指针是不一样的。指向成员函数的指针需要调用一个 object (成为this
指针)。您可能想了解std::function
和std::bind
。
您可能还想了解std::unordered_map
。
C++ Call Pointer To Member Function的可能重复
【参考方案1】:
for (int i = 2; i >= 0; i--)
if (actionsStr[i] == action_name)
(this->*(actions[i]))(target);
break;
【讨论】:
为什么会这样? 因为语言规则以上是关于当前类的成员函数的指针数组的主要内容,如果未能解决你的问题,请参考以下文章