【发布时间】:2019-11-22 14:45:51
【问题描述】:
我想创建一个已知大小的类函数数组。为此,我尝试使用 typedef,但到目前为止还没有成功。 此外,一些函数不接受任何参数。 F(),但其他人确实如此。 G(int n),并且在 typedef 中,我不知道如何告诉它不接受某些参数(尝试 void 但它说它不是类型),并接受其他参数。
class myClass
{
// An array of void functions
typedef void(myClass::*arrayOfFunctions)();
private:
arrayOfFunctions array[3] = { &myClass::F, &myClass::G, &myClass::H };
void F() { do stuff; }
void G(int n) { do stuff involving n; }
void H() { do stuff; }
};
我尝试过的: 我已经成功地在 main 中创建了一个 void 函数数组,没有涉及我可以在需要时调用的类,所以部分问题似乎是在一个类中实现它并使用它的类函数。
// This works:
typedef void(*arrayOfFunctions)();
void Action1()
{
// stuff 1
}
void Action2()
{
// stuff 2
}
void Action3()
{
//stuff3
}
int main()
{
arrayOfFunctions functionArray[] = { Action1, Action2, Action3 };
// Call Action1
functionArray[0]();
return 0;
)
【问题讨论】:
-
我只是好奇,你想用它实现什么?
-
您不能这样做 - 所有数组元素必须具有相同的类型。 (在C++中,一个空的参数列表意味着“没有参数”。它相当于C中的参数列表
(void)。) -
// An array of void functions typedef void(myClass::*arrayOfFunctions)();-- 更好的方法是让一个对象数组重载operator()。然后你可以有一个没有参数的函数,另一个有 3,另一个有 1,都具有不同的返回类型。使用函数指针的“老派”C 风格方式是有限的。 -
"我不知道如何告诉它不接受一些参数" - 你怎么知道你应该将参数传递给一些人?
标签: c++ arrays typedef class-method