MQL4でシングルトンパターンを実装することは可能ですか? - ページ 5

 
sergeev:

これは何?

それが、あなたが求めたものです。extern修飾子を持つクラスのインスタンスです。もちろん、不条理です。でも...

そう言っていましたね。しかし、その必要性を見いだせずにいます。

セルゲイ

しかし、構造体のインスタンスをexternにするのは良くないのでは?

externがどう関係するのか全く理解できないのですが?共有するデータを「作る」必要はないので、他のクラスに含めることができます。また、これらの変数は、プログラム実行 中に値を失ってはならない、つまり静的でなければならない。エクスターンについて教えてください。何のために?

 
hoz:

これが、あなたが求めたものです。クラスインスタンス...extern修飾子を持つ。もちろん、不条理です。でも...

は、まったくコンパイルされなかったのですか?


共有するデータを「作る」必要はないんです。
必要なのか?
 
sergeev:

全くコンパイルされなかったのですか?

確認はしていない。必要なことがまだ実行されていないため。

sergeev:

何が必要ですか?

必要なものを繰り返し...ある構造体があり、そのメンバはプログラム実行 中に値を保存しておかなければならないが、この構造体を使用する任意のクラスの任意のメソッドがアクセスされると、メンバを変更することができる。静止画である必要があることは理解しています。これらのメンバーは、単一のインスタンスである必要があります。この構造体のメンバーは、多くのクラスとExpert Advisor自体によって使用されます。

昔はそうだったんですけどね。

struct Symbol_Properties
{
   static datetime    gdt_Quote;           // Время поступления последней котировки
   static double      gda_Price [2];       // Текущие рыночные цены (0 - Bid, 1- Ask)
   static double      gd_Spread;           // Размер спреда в пунктах
   static double      gd_Swap;             // Своп
   static double      gd_Comission;        // Комиссия
   static double      gd_Pt;               // Величина одного пункта
   static int         gi_Digits;           // Количество знаков в цене после запятой
   static int         gi_StopLevel;        // Минимально-допустимый уровень стоп-лосса/тейк-профита в пунктах
   static int         gi_FreezLevel;       // Уровень заморозки ордеров в пунктах
};

Symbol_Properties::gdt_Quote = 0;
Symbol_Properties::gda_Price [2] = {0.0, 0.0};
Symbol_Properties::gd_Spread = 0;
Symbol_Properties::gd_Swap = 0;
Symbol_Properties::gd_Comission = 0;
Symbol_Properties::gd_Pt = 0;
Symbol_Properties::gi_Digits = 0;
Symbol_Properties::gi_StopLevel = 0;
Symbol_Properties::gi_FreezLevel = 0;

しかし、この場合、" name " が長いので、このような変数を参照するのは不便です。すなわち

Symbol_Properties::gd_Pt = 0;

どのように実装するのか?

 
hoz:

必要なことを繰り返させてもらうと...プログラム実行中に値を保存しておかなければならない構造体があるが、この構造体を使用するクラスのメソッドにアクセスすると、そのメンバを変更することができる。静止画である必要があることは理解しています。これらのメンバーは、単一のインスタンスである必要があります。この構造体のメンバーは、多くのクラスやExpert Advisor自体で使用されます。

作成された1つの変数を参照することの何が問題なのでしょうか?

 

そして、STRUCTURE NAME.MEMBER NAMEで参照する?

しかし、この変数が実行 時に現在の値を失わないという保証はあるのでしょうか?

 
hoz:

そして、STRUCTURE NAME.MEMBER NAMEで参照するのですか?

変数名.メンバー名.


しかし、この変数がプログラム実行中に現在値を失わないという保証はあるのだろうか?

例:HQ?

EAでマルチスレッド実行をしていますか?

何を失うというのですか?

 
в чем проблема обращаться к единственной созданной переменной?

誰にでも、自分の幻想の世界で生きる権利があるのです。

が、ホズユーザーの世界を破壊 するのは異常に難しい

彼の頭の中に入り込んで、何を想像しているのかがわからないからです。

「割が合わない- 変数が価値を失うために作られると?

現実にはどちらが。

変数には、スコープ、保存期間、リンクがあります

どの変数がどのようなスコープを持ち、いつ可視化され、いつ作成され、いつ破棄され、いつどこに渡すことができるのか、ということについて学びます。

ストレージの寿命について簡単に説明する。
static(すべての関数の外部で宣言された変数、またはstatic指定子を持つ変数) - 死亡時 = プログラムの存在の終了

automatic (関数内で宣言された変数) - 死亡時 = 生成された関数から離れる時

dynamic(newキーワードで作成された変数) - time of death = deleteキーワードの使用

 
sergeev:

EAにマルチスレッドを導入していますか?

どういうことかというと、そこに置いたものはそこにあるわけで、なぜ失われなければならないのか?


ここの ドキュメントを開いて見てください。

//+------------------------------------------------------------------+
//| Класс "Анализатор текстов"                                       |
//+------------------------------------------------------------------+
class СParser
  {
public:
   static int        s_words;
   static int        s_symbols;
   //--- конструктор и деструктор
                     Parser(void);
                    ~Parser(void){};
  };
...
//--- инициализация статических членов класса Parser на глобальном уровне
int CParser::s_words=0;
int CParser::s_symbols=0;

クラスや構造体の変数がプログラム実行中に値を失わないのであれば、なぜここでstaticと宣言されているのでしょうか?

パブリックセクションにあるのだから、構造的にそう言えるのでは...。

 
hoz:

ここの ドキュメントを開いて見てください。

クラスや構造体の変数が実行時に値を失わないのであれば、なぜ ここでstaticと宣言されているのでしょうか?

パブリックセクションにあるのだから、構造的にそう言えるのでは...。


じゃあ...渡されたリンクの2番目の文章を読んでみてください。

クラス内のスタティックは、関数内のスタティックとは少し意味が異なります。

 
hoz:

クラスや構造体の変数が実行時に値を失わないのであれば、なぜここでstaticと宣言されているのでしょうか?

パブリックセクションにある、構造のように言えるかもしれない...。


鈍感なのか、鈍感なのか、ぶっきらぼうで申し訳ないが、白黒で書いてある。

例えば、テキストを解析 するためのCParserクラスが あり、処理した単語や文字の総数を 数える必要が あります。 必要なクラスメンバを static宣言して グローバルに初期化 すれば十分 です。そうすれば、このクラスのすべてのインスタンスは共通の単語・文字カウンタを使用して 作業することになります。

言及があるところでは

クラスや構造体の変数が実行時に値を失う

OOPの原則を守り、グローバル変数を 作らず、静的なクラスメンバの助けを借りて、いくつかの単語の数を数えることができると書かれています。

それ(静的クラスメンバ)は単一のインスタンスとして作成され、与えられたクラスのオブジェクトがいくつ作成されるかに依存しない。