通过引用的函数指针数组

时间:2015-05-23 22:50:48

标签: c++ arrays pointers

我知道你可以通过参考传递一个数组:

void func(T (&arr)[4])
{
    std::cout<<sizeof(arr)/sizeof(arr[0]);
}

你可以传递一个函数指针数组,如:

void func(void(**run)(int i))
{
    run[0](100);
}

void func(void(*run[4])(int i))
{
    run[0](100);
}

但是你不能在函数指针的情况下使用sizeof来获得参数数组的大小。

通过引用的函数指针数组的正确语法是什么?

2 个答案:

答案 0 :(得分:3)

语法(奇怪)是:

void func(void (*(&run)[4])(int))

额外的括号是从一系列引用中消除声明的歧义 - 这在C ++中是非法的。

答案 1 :(得分:1)

@ 0x499602D2的答案是正确的,但你可能最好花几行来定义你需要的类型:

typedef void (*Func)(int i);
typedef Func FuncArr[4];

void callFuncs(FuncArr& funcs) {
   ...
}

恕我直言,它更具可读性。