次の 2 つtypedef
の sがあるとします。
typedef void (*pftype)(int);
typedef void ftype(int);
最初の定義は、1 つのパラメーターを取り、何も返さないpftype
関数へのポインターとして定義され、2 番目の定義は、1 つのパラメーターを取り、何も返さない関数型として定義されていることを理解しています。ただし、2 番目が何に使用されるかはわかりません。int
ftype
int
これらのタイプに一致する関数を作成できます。
void thefunc(int arg)
{
cout << "called with " << arg << endl;
}
次に、それぞれを使用してこの関数へのポインターを作成できます。
int main(int argc, char* argv[])
{
pftype pointer_one = thefunc;
ftype *pointer_two = thefunc;
pointer_one(1);
pointer_two(2);
}
関数型を使用する場合、ポインターを作成していることを指定する必要があります。関数ポインター型を使用して、私はしません。どちらもパラメーターの型として同じ意味で使用できます。
void run_a_thing_1(ftype pf)
{
pf(11);
}
void run_a_thing_2(pftype pf)
{
pf(12);
}
では、関数型はどのような用途に使用されるのでしょうか? 関数ポインタ型はそのケースをカバーしていませんか?それはより便利ですか?