为什么无法访问指向数组中成员函数的指针?

问题描述 投票:0回答:1

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

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-> *”,但没有任何效果。我得到的错误是“在明显的括号前面的表达式必须具有(指向指针的)函数类型”。根据互联网,这意味着我正在尝试调用未定义为函数的内容。但是我很确定自己是吗?谢谢

c++ arrays member-function-pointers
1个回答
0
投票

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

&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); }           
   }
}
};
© www.soinside.com 2019 - 2024. All rights reserved.