0

「typedef 関数」についてよく読んでいますが、これを呼び出そうとするとキャスト エラーが発生します。この関数を呼び出す正しい構文は何ですか?

typedef ::com::Type* Func(const char* c, int i);
4

3 に答える 3

4

そのステートメントはFunc型を作ります。Func *f = anotherFunc次に、別の関数が次のように定義されていると言う必要があります。::com::Type* anotherFunc(const char *c, int i){ /*body*/ }

その後、呼び出すことができf("hello", 0)、動作するはずです。

于 2013-01-17T19:07:41.813 に答える
2

あなたのコードには関数がありません。Func関数型を表す型名しかありません。そこに電話するものは何もありません。

Func質問で定義されているnameは、いくつかの異なる方法で使用できます。

たとえば、関数を宣言するために使用できます

Func foo;

上記は宣言と同等です

::com::Type* foo(const char*, int);

これは、メンバー関数の宣言でも機能します。(ただし、関数の定義には使用できません)。

別の例として、明示的に追加することにより、関数へのポインターを宣言するときに使用できます。*

Func *ptr = &some_other_function;

上記は宣言と同等です

::com::Type* (*ptr)(const char*, int) = &some_other_function;

さらに別の例として、別の関数でパラメーターの型として使用できます

void bar(Func foo)

その場合、関数型は自動的に関数ポインター型に減衰します。つまり、上記の の宣言はbar次と同等です。

void bar(Func *foo)

と同等

void bar(::com::Type* (*foo)(const char*, int));

等々。

言い換えれば、あなたがそれで何をしようとしているのかを示してください。あなたの質問は広すぎて具体的に答えることができません。

于 2013-01-17T19:15:24.240 に答える
1

typedef関数の構文:

#include <iostream>
using namespace std;

int add(int a, int b) {return a+b;}

typedef int(*F)(int a, int b);

int main() {
    F f = add;
    cout  << f(1,2) << endl;
    return 0;
}

の内訳typedef int(*F)(int a, int b);

  • type名前は括弧内のFです
  • リターンタイプはint先頭にあります。
  • パラメータは(int、int)です

使用法F f = &add;

  • Fは私たちのタイプです。
  • fは変数名です。
  • addは、正しいシグネチャを持つ関数です。

あなたの場合の有効な構文は次のとおりです。typedef ::com::Type (*Func)(const char* c, int i);

于 2013-01-17T19:12:31.120 に答える