mql5におけるOOP、テンプレート、マクロ、微妙な使い分け - ページ 3

 
Алексей Тарабанов:

作り方を発見したんですね。

あなたは何かに迷っている。
 
Ilya Malev:

クラスの インスタンスが少なくとも1つ作成される前の初期化段階で、そのクラスの静的フィールドを使おうとしています。私の考えでは、これは倒錯である...。通常はこのように動作します。

カプセル化の原則では、このようなフィールドは一般に公開されるのではなく、隠されるべきであるとされています。

静的フィールドはそのために静的なフィールドであり、クラスのインスタンスを持っていることに依存しません。 しかし、もしあなたが最初にクラスのインスタンスを作りたいなら - OK、作ってください、ただし関数の中だけで。 そしてこのフィールドをそこから(直接またはメソッドを通して)要求します - 結果は再び同じです。

 
Alexey Navoykov:
あなたは何かに迷っている。

いや、何も迷ってないんですよ。

まずグローバルレベルの変数、次に静的変数、そしてコードに現れるローカル変数。

この例は、関数で変数を初期 化しないことを推奨する文書に違反しています。開発者にとっては、どこがマストでどこがマストでないかを説明するより、このような警告を書く方が簡単だったのです。

サンプルに含まれる静電気を除去し、目的の結果を得ることができます。

 
Алексей Тарабанов:

いや、何も迷ってないんですよ。

まずグローバルレベルの変数、次に静的変数、そしてコードに現れるローカル変数。

この例は、関数で変数を初期 化しないことを推奨 する文書に違反しています。開発者にとっては、どこがマストでどこがマストでないかを説明するより、このような警告を書く方が簡単だったのです。

あなたの例から静的なものを取り除き、望ましい結果を得ることができます。

"ドキュメンテーションのすすめ"))あなたには驚かされます。本当にまだ分からないのか? 言語にバグがあるんだよ。開発者自身が話していて、このバグに遭遇しないための正しいタンバリンのやり方を説明しています。このバグはきっぱりと忘れるようにしました。
 
Alexey Navoykov:

定数であれば(コードが賢ければ、グローバルな可視性はほとんど定数を宣言する)、他の選択肢はない。

黄色いものについては、「なぜ? 問題を解決する方法は、すでに考えてあります。

せっかく作ったものを汚さないように、HERE。

 
Alexey Navoykov:
"ドキュメンテーションのススメ"))一緒に驚いています。本当にまだ理解していないのですか? 言語にバグがあるのです。開発者自ら、このバグに遭遇しないための正しいタンバリン奏法を解説してくれています。このバグはきっぱりと忘れるようにしました。

関数で何かの値を開始することはできません。たとえ、本当にそうしたいと思ってもわからないのか?

 
Alexey Navoykov:

静的フィールドは静的なものなので、クラスのインスタンスには依存しません。 しかし、もし最初にクラスのインスタンスを作りたいのであれば、OK、ただし関数の中だけで作ってください。 そして、このフィールドをそこから(直接でもメソッド経由でも)要求します - 結果はまた同じになります。

では、手続き型プログラミングなのか、オブジェクト指向プログラミングなのか。しかも型付きオブジェクトを参照して初期化する前の段階で、なぜクラスと関係のない関数を実行しなければならないのか。気が向いたから」という答えが返ってくるのは理解できる。しかし、もし私が開発者なら、この特殊な動作を修正するためにすべてをキャンセルして走ることは急がないでしょう。なぜなら、これはかなり限界のあるアーキテクチャで、しかも、この問題はクラスのインスタンスを作成すれば簡単に解決するからです。もちろん、関数の内部ではありません。

 
Alexey Viktorov:

すでに作ってしまったものを汚さないように、FOREVER。

でも、あなたは、MQによる人為的な制約で自分を縛ることに喜びを感じているようですね。 もしかして、マゾヒストなのでしょうか?)それなのに、しつこく「こうすればいいんだ」と納得させようとする。 必要ない、無理矢理なんです。
 
Алексей Тарабанов:

関数で何かの値を開始することはできません。たとえ、本当にそうしたいと思ってもわからないのか?

はい、わかりません、説明してください。
 
Ilya Malev:

では、手続き型プログラミングなのか、オブジェクト指向なのか。なぜ、突然、型付きオブジェクトに関して、初期化前にクラスと関係ない機能を実行するようになったのか。気が向いたから」という答えが返ってくるのは理解できる。しかし、もし私が開発者なら、この特殊な動作を修正するためにすべてをキャンセルして走ることは急がないでしょう。なぜなら、これはかなり限界のあるアーキテクチャで、しかも、この問題はクラスのインスタンスを作成すれば 簡単に解決するからです。もちろん、関数内ではありません

つまり、あなたはグローバル 変数の大量使用を支持する人なんですね、私の理解では。 では、あなたと私は理解し合えそうにありませんね。

さらに、関数そのものがテンプレートである場合もある。また、生成されたインスタンスは、それぞれ同じ型でパラメータ化される必要があります。

template<typename T>
int f()
{  
  A<T> a;
  return a.f();
}

何をするんですか?