0
typedef void(Object Sender) TNotifyEvent;

これは私が Delphi から C++ にしようとしているものですが、「予期しない型 int」でコンパイルに失敗します。

結果は、次のように使用できるものになるはずです。

void abcd(Object Sender){
  //some code
}

void main{
   TNotifyEvent ne = abcd;
}

そのような型(void型の)を作成するにはどうすればよいですか? 私は C++ にあまり詳しくありません。

4

3 に答える 3

4

オブジェクトを受け取り、何も返さない関数へのポインターが必要ですか?

 typedef void (*TNotifyEvent)(Object Sender);
于 2010-07-15T15:18:11.613 に答える
1

オブジェクトをパラメーターとして取り、何も返さない関数の型を定義したい場合、構文は次のようになります。

typedef void TNotifyEvent( Object Sender );

編集、コメントへの回答として。

はい、関数の型を定義できます。その型は、後でさまざまなコンテキストでさまざまな意味で使用できます。

TNotifyEvent func;          // function declaration (weird as it might look)
                            // same as: void func( Object Sender );
TNotifyEvent *fp = func;    // function pointer declaration -- initialized with &func
void func( Object Sender )  // cannot use the type when defining the function
{}
void foo( TNotifyEvent f ); // compiler translates to TNotifyEvent * f
                            // just as 'int a[5]' is converted to 'int *a' 
                            // in function parameter lists.
于 2010-07-15T15:18:01.347 に答える
1

いいえ、C++ には共通の「オブジェクト」クラスがないためです。おそらく必要なのはコールバック (イベントを見る...) で、これにはファンクター (クラスのオーバーロードoperator()) または関数ポインターが必要です。

関数ポインタを使用した例を次に示します。

typedef void (*TNotifyEvent)(void *sender);
于 2010-07-15T15:18:55.480 に答える