Alexey Navoykov: Ну вот я с этого и начинал разговор тут. Планировал тоже заменять все статики на глобалы (хоть это и жесть конечно). Но как показано выше, с шаблонами такое не прокатит. С макросами тоже. А я всё это широко применяю. Поэтому и сделал свою реализацию. Хотя она конечно не решает всех проблем. Динамические массивы по-прежнему нельзя инициализировать, константные типы тоже. Поэтому их однозначно придётся выносить на глобальный уровень
マルチパスについて-あわてて、MCLなら許されると甘く見ていた
Ну вот я с этого и начинал разговор тут. Планировал тоже заменять все статики на глобалы (хоть это и жесть конечно). Но как показано выше, с шаблонами такое не прокатит. С макросами тоже. А я всё это широко применяю. Поэтому и сделал свою реализацию. Хотя она конечно не решает всех проблем. Динамические массивы по-прежнему нельзя инициализировать, константные типы тоже. Поэтому их однозначно придётся выносить на глобальный уровень
また、私はテンプレートやマクロを多用していますが、自由関数はあくまで補助的な(一般的には望ましくない)アーキテクチャの要素としてしか考えていません。すべての実装をオブジェクトの中に詰め込み、静的な宣言はクラスレベルでしか行わない場合、その正しい宣言の順序のロジックが理解できないことがあり、コンパイラが悪態をつかないようにする以外は、厄介なバグが発生します...
つまり、ここには変数があるのです。そして、関数の場合は、そう、マルチパス可能なので、すべてが正しかったのです。 問題は、まさに関数の初期化の順序にあります。 つまり、C++では、変数、関数、型に適用される厳格な順序がひとつあります。 そしてMQLではすべてが異なっているのです。
再帰やデッドロックが発生する可能性があります。しかし、プラス面ではそれが可能なのです。したがって、賢明に、慎重に(つまり前方宣言)するのみであり、現在のマルチパスコンパイラのように、任意の関数に対して前方宣言がなされた場合、遅かれ早かれこの熊手はあなたの額にヒットします。
マルチパスは、再帰やデッドロックなど、どのような場合でもよくありません。しかし、プラスアルファでフォワード宣言をすることは可能です。したがって、唯一の賢明な、慎重に、そしてmultipassコンパイラで今のようにしない - 任意の関数の前方宣言が行われているかのように、遅かれ早かれ、この熊手はあなたの額をヒットします。
私もそう思います。この話題は、先ほども少し触れました。関数の宣言の順番にこだわらないというのは、この言語の多くの人が好むところです。 もちろん、私自身も少し前までは喜んでいました)。 しかし、その面倒くささは、逆に私をイライラさせました。 しかし、経験を積めば理解できるようになるのです。
また、私はテンプレートやマクロを多用していますが、自由関数はあくまで補助的な(一般的には望ましくない)アーキテクチャの要素としてしか考えていません。すべての実装をオブジェクトの中に詰め込み、静的な宣言はクラスレベルでしか行わない場合、その正しい宣言の順序のロジックが理解できないことがあり、コンパイラが悪態をつかないようにする以外は、厄介なバグが発生します...
そうですね、OOPですべてが明確に並んでいれば、フリー関数だけでなく、テンプレートメソッドも不要になりますね。
テンプレートメソッドは、OOPでも非ODOPでも、反復的なコードを大量に書きたくない場合に必要とされます。自由関数はまた別の問題で、これらは異なるプログラミングスタイルです。
テンプレートメソッドは、OOPであろうと非ODOPであろうと、反復的なコードを大量に書きたくない場合に必要とされるものです
OOPでは、この目的のためにインターフェイスが考案された。
インターフェイスはちょっと違いますね。もし私が、パラメータクラスによって異なる型を持つ同じコードを(追加のクラスを宣言することなく)行いたい場合、インターフェースは役に立ちません。
インターフェイスは少し違います。もし私が、同じコードで、パラメータクラスによって異なる型を持つ同じ仕事をしたい場合(追加のクラスを宣言することなく)、インターフェースは役に立ちません。
もしパラメータが異なる型であれば、対応する型を持つオーバーロードされたメソッドを いくつか作るのが理にかなっています。 それでも、関数内で何らかの方法でそれらを分ける必要があります。 つまり、非人称型も取るような混乱を作るよりは、別々の関数に分ける方が良いのです。間違って何でも渡して、ライブラリ内でコンパイルエラーになるのは良くありません。 そして多分そうではないので、二重に悪いのです)。
つまり、本格的なOOPでは、テンプレート関数は(一部の例外を除いて)松葉づえなのです。
つまり、テンプレート関数は、本格的なOOPでは松葉づえのような ものなのです。
それで、こうなりました。
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
mql5言語の特徴、TipsとTricks
アレクセイ・ナヴォイコフ 2019.01.25 10:11
まあ、そんなこんなで、ここで 話を始めました。私もスタティックはすべてグローバルに置き換えるつもりでした(もちろん残酷なことですが)。 しかし、上記のように、テンプレートや マクロも使えません。 そして、私はそれらをすべて広く使って います。動的配列はまだ初期化できないし、定数型も初期化できない。 だから、グローバル化する必要があるんだ。