我有一个带有指向类方法的指针的数组的类。但是,在类中,当我尝试调用数组中的函数之一时,出现错误。这是相关的代码:
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-> *”,但没有任何效果。我得到的错误是“在明显的括号前面的表达式必须具有(指向指针的)函数类型”。根据互联网,这意味着我正在尝试调用未定义为函数的内容。但是我很确定自己是吗?谢谢
如果遵循正确的语法,您可以;)使用以下方法获取方法的地址:
&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); }
}
}
};