1. ホーム
  2. c++

[解決済み] 別のtypedefを使用せずに、関数ポインタの配列を宣言するための構文は何ですか?

2022-03-03 07:03:37

質問

関数ポインタの配列は、次のように作成できます。

typedef void(*FunctionPointer)();
FunctionPointer functionPointers[] = {/* Stuff here */};

を使わずに関数ポインタ配列を作成するための構文を教えてください。 typedef ?

解決方法は?

arr    //arr 
arr [] //is an array (so index it)
* arr [] //of pointers (so dereference them)
(* arr [])() //to functions taking nothing (so call them with ())
void (* arr [])() //returning void 

ということで、答えは

void (* arr [])() = {};

しかし、当然ながら、これは悪い習慣で、単に typedefs :)

おまけ intを受け取り、charを返す関数への3つのポインタの配列を、doubleを受け取り、charを返す関数への4つのポインタの配列に宣言するにはどうしたらいいでしょうか?なんてクールなんでしょう!(笑)

arr //arr
arr [3] //is an array of 3 (index it)
* arr [3] //pointers
(* arr [3])(int) //to functions taking int (call it) and
*(* arr [3])(int) //returning a pointer (dereference it)
(*(* arr [3])(int))[4] //to an array of 4
*(*(* arr [3])(int))[4] //pointers
(*(*(* arr [3])(int))[4])(double) //to functions taking double and
char  (*(*(* arr [3])(int))[4])(double) //returning char

:))