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

 
FAQ:

定義済みの変数や標準的な構造体を使用する方が簡単ではないでしょうか?

例を挙げてほしい。代替案は出なかったものの、車輪の再発明みたいなものだと一通り読んでいるのですが...。
 
の例です。
 

では、私が引用した基本構造の他の型は、定義済み 変数のどこにあるのか、示してください。

特にこの構造の話ではなく、この手法全般の話です。

例えば、ポジションプロパティの構造は以下の通りです。

struct Position_Properties
{
   datetime    gdt_Expiration;      // Срок истечения отложенного ордера
   datetime    gdt_OpenTime;        // Время открытия выбранной позиции
   double      gd_OpenPrice;        // Цена открытия
   double      gd_Lots;             // Объём позиции на открытие
   double      gd_CurSL;            // Текущий Stop Loss выбранной позиции
   double      gd_NewSL;            // Новый Stop Loss выбранной позиции
   double      gd_CurTP;            // Текущий Take Profit выбранной позиции
   double      gd_NewTP;            // Новый Take Profit выбранной позиции
   int         gi_CurTicket;        // Тикет выбранного ордера
   int         gi_Type;             // Тип торговой операции
   int         gi_Slippage;         // Максимально допустимое отклонение цены для рыночных ордеров
   int         gi_Magic;            // Магический номер
   string      gs_Comment;          // Комментарий
   string      gs_Symbol;           // Наименование фин. инструмента, с которым производится операция
   ulong       gu_Duration;         // Длительность позиции в секундах
} SPos;

また、事前定義された変数?そのような定義済みの変数はありません!

 
最初の投稿で示した構成から判断すると、そこから始めるべきだったのでしょう。
 
FAQ:
なるほど、最初の投稿で教えていただいた構成からすると、いい感じですね。


ああ、わかったよ。では、どのような選択肢があるのでしょうか?この点については、本当に困っているんです。せめて何か解決策が欲しい。これらの変数をクラスに渡すにはどうしたらよいでしょうか。便利さを求めるからこそ...。

 
hoz:

インスタンスが1つしか必要ない構造体があるのですが。もちろん、これらの構造体の異なるクラスのオブジェクトを複数作成することは推奨されません。

そこで、この場合はシングルトン・パターンを使うのが最も合理的だという結論に達したのです。

そうだろ?

間違っている。

externt モディファイアを使用します。

 

そうだろ?

struct Position_Properties
{
   extern static datetime    gdt_Expiration;      // Срок истечения отложенного ордера
   extern static datetime    gdt_OpenTime;        // Время открытия выбранной позиции
   extern static double      gd_OpenPrice;        // Цена открытия
   extern static double      gd_Lots;             // Объём позиции на открытие
   extern static double      gd_CurSL;            // Текущий Stop Loss выбранной позиции
   extern static double      gd_NewSL;            // Новый Stop Loss выбранной позиции
   extern static double      gd_CurTP;            // Текущий Take Profit выбранной позиции
   extern static double      gd_NewTP;            // Новый Take Profit выбранной позиции
   extern static int         gi_CurTicket;        // Тикет выбранного ордера
   extern static int         gi_Type;             // Тип торговой операции
   extern static int         gi_Slippage;         // Максимально допустимое отклонение цены для рыночных ордеров
   extern static int         gi_Magic;            // Магический номер
   extern static string      gs_Comment;          // Комментарий
   extern static string      gs_Symbol;           // Наименование фин. инструмента, с которым производится операция
   extern static ulong       gu_Duration;         // Длительность позиции в секундах
} SPos;

Position_Properties::gdt_Expiration = 0;
Position_Properties::gdt_OpenTime = 0;
Position_Properties::gd_OpenPrice = 0.0;
Position_Properties::gd_Lots = 0.0;
Position_Properties::gd_CurSL = 0.0;
Position_Properties::gd_CurTP = 0.0;
Position_Properties::gd_NewSL = 0.0;
Position_Properties::gd_NewTP = 0.0;
Position_Properties::gi_CurTicket;
Position_Properties::gi_Type;
Position_Properties::gi_Slippage = 3;
Position_Properties::gi_Magic;
Position_Properties::gs_Comment;
Position_Properties::gs_Symbol;
Position_Properties::gu_Duration:
 
hoz:

そうだろ?


変な理屈


が、構造体のインスタンスをexternにした方がいいのでは?

 
sergeev:

変な理屈


構造体のインスタンスをexternにしたらどうでしょう?

そんな瞬間はどこにも書いていない。どうすればいいのか?私の知っているプログラマーは皆無です。そして、そのうちの何人かは、いまだにフォーラムに乗り込んできて、私をバカにするのです。

そうだろ?

struct Position_Properties
{
   static datetime    gdt_Expiration;      // Срок истечения отложенного ордера
   static datetime    gdt_OpenTime;        // Время открытия выбранной позиции
   static double      gd_OpenPrice;        // Цена открытия
   static double      gd_Lots;             // Объём позиции на открытие
   static double      gd_CurSL;            // Текущий Stop Loss выбранной позиции
   static double      gd_NewSL;            // Новый Stop Loss выбранной позиции
   static double      gd_CurTP;            // Текущий Take Profit выбранной позиции
   static double      gd_NewTP;            // Новый Take Profit выбранной позиции
   static int         gi_CurTicket;        // Тикет выбранного ордера
   static int         gi_Type;             // Тип торговой операции
   static int         gi_Slippage;         // Максимально допустимое отклонение цены для рыночных ордеров
   static int         gi_Magic;            // Магический номер
   static string      gs_Comment;          // Комментарий
   static string      gs_Symbol;           // Наименование фин. инструмента, с которым производится операция
   static ulong       gu_Duration;         // Длительность позиции в секундах
};
extern Position_Properties::SPos;
Position_Properties::gdt_Expiration = 0;
Position_Properties::gdt_OpenTime = 0;
Position_Properties::gd_OpenPrice = 0.0;
Position_Properties::gd_Lots = 0.0;
Position_Properties::gd_CurSL = 0.0;
Position_Properties::gd_CurTP = 0.0;
Position_Properties::gd_NewSL = 0.0;
Position_Properties::gd_NewTP = 0.0;
Position_Properties::gi_CurTicket;
Position_Properties::gi_Type;
Position_Properties::gi_Slippage = 3;
Position_Properties::gi_Magic;
Position_Properties::gs_Comment;
Position_Properties::gs_Symbol;
Position_Properties::gu_Duration:
 
hoz:

そのような瞬間については何も書かれていません。どうすればいいのか?私の知っているプログラマーは皆無です。そして、そのうちの何人かは、いまだに掲示板で私をからかっているのです。

そうだろ?


これは何でしょう?

extern Position_Properties::SPos;