为啥我不能访问指向数组中成员函数的指针?

Posted

技术标签:

【中文标题】为啥我不能访问指向数组中成员函数的指针?【英文标题】:Why can't I access the pointer to my member function in my array?为什么我不能访问指向数组中成员函数的指针? 【发布时间】:2020-01-30 03:14:45 【问题描述】:

我有一个带有指向类方法的指针数组的类。但是,在课堂上,当我尝试调用数组中的某个函数时,出现错误。以下是相关代码:

class MyClass

typedef void(MyClass::*FunctionPointer)(size_t *i);
void func1(size_t *i)  
void func2(size_t *i)  
void func3(size_t *i)  
void func4(size_t *i)  

FunctionPointer myFuncs[4] =  func1, func2, func3, func4 ;
const std::string funcList[4] =  "FUNC1", "FUNC2", "FUNC3", "FUNC4" ;

void doFunc(std::string in)

   size_t *j = 0;
   for (size_t i = 0; i < 4; ++i)
   
      if (in == funcList[i])  this->myFuncs[i](j);            
   

;

我尝试省略“this->”和“this->*”,但没有任何效果。我得到的错误是“明显调用括号前的表达式必须具有(指向)函数类型。”根据互联网,这意味着我正在尝试调用未定义为函数的东西。但我很确定我是? 谢谢

【问题讨论】:

【参考方案1】:

如果你遵循正确的语法,你可以;) 获取方法的地址使用:

&MyClass::func1

然后解析函数指针,做:

(this->*myFuncs[i])

或全部...

class MyClass

typedef void(MyClass::*FunctionPointer)(size_t *i);
void func1(size_t *i)  
void func2(size_t *i)  
void func3(size_t *i)  
void func4(size_t *i)  

FunctionPointer myFuncs[4] =  &MyClass::func1, &MyClass::func2, &MyClass::func3, &MyClass::func4 ;
const std::string funcList[4] =  "FUNC1", "FUNC2", "FUNC3", "FUNC4" ;

void doFunc(std::string in)

   size_t *j = 0;
   for (size_t i = 0; i < 4; ++i)
   
      if (in == funcList[i])  (this->*myFuncs[i])(j);            
   

;

【讨论】:

谢谢!我曾尝试使用 '*' 取消引用该函数,但我没有括号。

以上是关于为啥我不能访问指向数组中成员函数的指针?的主要内容,如果未能解决你的问题,请参考以下文章

成员函数指针数组:当控件到达指向成员函数的指针时获取 0xcccccccc

为啥指向成员函数的指针不像数据指针那样只是内存地址

为啥即使从类内部获取成员函数指针值也需要类名限定?

存储指向成员函数的指针不适用于 clang++

指向基类中成员函数的指针数组

访问包含在数组中的指向类对象的类成员函数的正确语法是啥?