関数ポインタ型を返す 質問する

関数ポインタ型を返す 質問する

関数ポインタを返す関数を記述する必要に迫られることがよくあります。その場合、私が使用する基本形式は次のようになります。

typedef int (*function_type)(int,int);

function_type getFunc()
{
   function_type test;
   test /* = ...*/;
   return test;
}

しかし、多数の関数を扱う場合には面倒になる可能性があるため、関数ごとに(または関数のクラスごとに)typedefを宣言する必要がないようにしたいと思います。

typedef を削除し、関数内で返されるローカル変数を次のように宣言すると、int (*test)(int a, int b);関数本体は次のようになります。

{
     int (*test)(int a, int b);
     test /* = ...*/;
     return test;
}

しかし、関数の戻り値の型に何を設定すればよいかわかりません。私は次のことを試しました:

int(*)(int,int) getFunc()
{
    int (*test)(int a, int b);
    test /* = ...*/;
    return test;
}

しかし、それは構文エラーを報告します。関数ポインターの typedef を宣言せずに、このような関数の戻り値の型を宣言するにはどうすればよいですか。それは可能ですか? また、関数ごとに typedef を宣言する方がきれいになると思われることは承知していますが、できるだけきれいでわかりやすいコードを構成するように細心の注意を払っています。typedef を削除したい理由は、typedef は取得関数を宣言するためだけに使用されていることが多く、コード内で冗長に見えるためです。

ベストアンサー1

int (*getFunc())(int, int) { … }

これにより、要求された宣言が提供されます。さらに、オラオルソン注記: を挿入すると良いでしょうvoid:

int (*getFunc(void))(int, int) { … }

これは、 がパラメータを一切受け取らない可能性があることを示しており、誰かが誤っての代わりに とgetFunc記述するなどのエラーを回避するのに役立ちます。getFunc(x, y)getFunc()(x, y)

おすすめ記事