int sub(int x,int y) { return(x-y); }
int add(int x,int y) { return(x+y); }
int neg(int x) { return(~x); }
func_ptr=sub;
Print(func_ptr(10,5));
func_ptr=add;
Print(func_ptr(10,5));
func_ptr=neg; // error: neg is not of int (int,int) typePrint(func_ptr(10)); // error: there should be two parameters
ところで、ビルド1325で関数への ポインタが導入されたことをご存知でしょうか?
三角通信を適用する上で何か違いがあるのでしょうか?
MQL5です。イベントモデルの配置を簡素化するために、関数へのポインタのサポートを追加しました。
関数へのポインタを宣言するには、例えば「関数へのポインタ」型を指定します。
これで、TFuncが型となり、関数への変数ポインタを宣言することが可能になりました。
func_ptr 変数は、後で宣言するために、関数のアドレスを格納することができます。
関数へのポインタは、パラメータとして格納し、渡すことができます。非静的なクラスメソッドへのポインタは取得できない.
はMT5用で、私が見た限りではまだメソッド用ではなく、関数だけです。
とにかく、ベースクラス内でサードパーティーの能力をどのように定義するのか、例えばトレンドラインと コンテナの文脈では、3番目のオブジェクトはどこにあるのか、まだ理解できていない。
でも、もう一度読み直してみます。
つまり、誰が(どのクラスが)どのような(イベントを)取得するのか、どこでどのように決定するのか、ということです。
一番上のディスパッチャ、つまり言語ネイティブなもの、つまり言語 ::OnChartEvent は、プロジェクトの最上位クラスで一度だけ書かれることは明らかです。
では、ここから、異なるオブジェクトにイベントをディスパッチする正しい方法とは何でしょうか?
ディスパッチ・イベント・クラスが必要なのか?if文に基づく:OnChartEventの中だけで行うべきでしょうか?
OOやMQL5と連携したイベントモデルについて理解が足りないのは、イベントをどのようにディスパッチするのが正しいのか、ということです。
つまり、誰が(どのクラスが)どのような(イベントを)取得するのか、どこでどのように決定するのか、ということです。
一番上のディスパッチャ、つまり言語ネイティブなもの、つまり言語 ::OnChartEvent は、プロジェクトの最上位クラスで一度だけ書かれることは明らかです。
では、ここから、異なるオブジェクトにイベントをディスパッチする正しい方法とは何でしょうか?
ディスパッチ・イベント・クラスが必要なのか?if文に基づく::OnChartEventの中だけで行うべきでしょうか?
OK、わかったような気がします。手続き型からOOP型になると、コンセプトがずれるという問題が本当にありますね。
実は、私もオブザーバーを実装したかったのですが、MQLにはインターフェースがなく、また多重継承ができないため、実装しませんでした。同じオブジェクトが双方でインターフェイスを強制することができるという、あなたの良いアイデアについては考えもしませんでした。
そのため、実際に各CObjectはイベントの受信者である1つのオブジェクトの場所を持ち、また、そのように購読するためのリスニングオブジェクトの登録メソッド、イベント送信者メソッド、受信者が使用するイベントハンドラメソッドを持っています。
実は、私もオブザーバーを実装したかったのですが、MQLにはインターフェースがなく、また多重継承ができないため、実装しませんでした。同じオブジェクトが双方でインターフェイスを強制することができるという、あなたの良いアイデアについては考えもしませんでした。
ただ、励みになるのは、私はMQL4でリスナーをよく使うようになったことです。
ありがとうございます、でも励まされた気がしません(。
つまり、パブリッシャーはリスナーがハンドリングメソッドを持っていると仮定しなければならないのですが、何も持っていることを強制されることはありません。
リスナーは他のクラスを継承することができないので、もちろん意味がありません。
とにかく、私はプログラミングのプロですが、今のところ経験が不足しているOOではありませんし、Doerkのような経験豊富なOOプログラマーの皆さんと競争しているわけでもないのです。
私のような手続き型の人間が、OOフレームワークを作るというミッションに直面すると、全く異なる精神状態になるのです。また、GUI部分のフレームワークは、多くのイベントを扱う最も細かいフレームワークで、フレームワークの中で最も作るのが難しいというのは、皆さんも同意していただけると思います。