標準的なC++でのイベント処理とイベントの宣言について、テスト目的で小さなライブラリを実装していました。関数ポインタは署名に関係なく機能しますか?サプライズ
私の生き物を苦労してデバッグしていたのですが、ついにそれが効きました!!ここで
は、サンプルコードでは、結局次のとおりです。
#include "Event.h"
#include "Handler.h"
using namespace System; // lol yeah, I wrapped all into namespace called System (like .NET) :D
//this is the actual event trigger function:
int x(int) {
Write "event!!";
return 0;
}
typedef void (*EventHandler)(); //this is funny(pointer to int(*)(int)
//simple implementing new keywords: (macros and typedefs)
int main() {
event test; //new event
Handler hnd(test, EventHandler(x)); // EventHandler takes void(*)() NOT int(*)() !!!
emit(test); //raise event triggers the x function with no problem
return 0;
}
それがエラーなしでコンパイルどのように来ます?
私はすべてのコードを貼り付けますが、それは複雑だ
...私の質問です:私はちょうど良い方法typedef
EventHandler
作品の混乱していますか?
"イベントトリガ機能"の署名に関係なく、コンパイル出力は問題なく、エラーはありません。
'EventHandler(x)'は '(EventHandler)x'と同じです。あなたは 'x'を別の型として扱うようにコンパイラを強制しています。なぜコンパイルしないのですか? – ildjarn
* "私はすべてのtHEコードをペーストしますが、それは複雑です" * - 読者とあなた自身の両方にとってより有用なのは、最小限の完全な例を構築することです。あなたが示したコードからは、 'Handler'のためにスタブを与え、' event'ものだけを落とす必要があるようです。 – Flexo
@ildjarnそれは答え、コメントではありません。 –