2015-05-23 7 views
0

Я знаю, что вы можете передать массив по ссылке, выполнив:Массив указателя функции по ссылке

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); 
} 

Но вы можете» t используйте sizeof для случая (-ов) указателей функций, чтобы получить размер массива параметров.

Каков правильный синтаксис для массива указателя функции по ссылке?

ответ

3

Синтаксис бы (как ни странно) быть:

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

Дополнительный скобка является неоднозначность декларацию из массива ссылок - который является незаконным в C++.

+1

Подождите 6 минут, чтобы принять = {Самый нечетный синтаксис, который я видел до сих пор. Я делал это, но без дополнительной скобки = l – Brandon

1

@ ответ 0x499602D2 является правильным, но вы могли бы быть лучше потратить пару строк определения типов нужно:

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

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

ИМХО, это немного более удобным для чтения.

Смежные вопросы