1

関数ポインタを使用して2つの異なるコードに遭遇しました。

どちらが良いか教えてください。好みはありますか?

typedef int myFunction(int a,int b);
extern myFunction *ptfunction;

typedef int (*ptfunction)(int a,int b);
4

5 に答える 5

6

どちらも構文的に正しくないという点で悪いです。

必要なもの:

typedef int (*myFunction)(int a, int *b);
于 2012-07-04T14:37:36.363 に答える
1

2 番目は無効です。型ではなく変数を宣言するように最初の行を修正すると、最初の行と同等になります。

int (*ptfunction)(int a, int b);

どちらが「より良い」かは、これらのもので何をしたいかによって完全に異なります。同じ型を何度も参照する必要がある場合は、typedefを使用するとわかりやすくなります。例のように単一の関数ポインターを宣言するだけの場合は、余分なノイズが追加されるだけです。

(おそらく、最初の例では、2 番目のパラメーターはintnotint*である必要があります。そうしないと、関数呼び出しがコンパイルされません)。

多くの場合、関数オブジェクトを使用する方が便利で柔軟です。std::function特に、これらは任意の状態をバインドできるためです。しかし、それはこの質問の範囲を超えています。

于 2012-07-04T15:05:26.753 に答える
1

どちらでもない、使うstd::function

std::function<int (int ,int)> ptfunction;
ptfunction = f1;

例 (c++0x の std にあります):

ブーストバインドの使い方

std::関数

于 2012-07-04T14:46:02.137 に答える
0

最初のものには別のエラーが含まれています: int を int へのポインターにキャストすることはできません。で、どっちがいいの?どちらも完全に文脈から外れています。

于 2012-07-04T14:40:25.223 に答える
0

最初のコードでは、ptfunction をどこかに定義する必要があります。2番目のコードはコンパイルできないと思います。

これを試して:

typedef int *PTFUNCTION(int, int);
PTFUNCTION func = f1;
func(1, 2);
于 2012-07-04T14:40:28.640 に答える