「typedef 関数」についてよく読んでいますが、これを呼び出そうとするとキャスト エラーが発生します。この関数を呼び出す正しい構文は何ですか?
typedef ::com::Type* Func(const char* c, int i);
そのステートメントはFunc
型を作ります。Func *f = anotherFunc
次に、別の関数が次のように定義されていると言う必要があります。::com::Type* anotherFunc(const char *c, int i){ /*body*/ }
その後、呼び出すことができf("hello", 0)
、動作するはずです。
あなたのコードには関数がありません。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));
等々。
言い換えれば、あなたがそれで何をしようとしているのかを示してください。あなたの質問は広すぎて具体的に答えることができません。
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
先頭にあります。使用法F f = &add;
:
あなたの場合の有効な構文は次のとおりです。typedef ::com::Type (*Func)(const char* c, int i);