È possibile implementare un modello singleton in MQL4. - pagina 4

 
FAQ:

Non sarebbe più facile usare variabili predefinite e strutture standard?

Vorrei vedere un esempio. Sto leggendo un'intera pagina che sto un po' reinventando la ruota, anche se non è stata suggerita nessuna alternativa...
 
esempio di cosa?
 

Mostratemi, allora, dove sono, nelle variabili predefinite, gli altri tipi della struttura di base che ho citato?

Non sto parlando specificamente di questa struttura, ma di questa tecnica in generale.

Per esempio, ecco la struttura delle proprietà di posizione:

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;

Anche le variabili predefinite? Non ci sono queste variabili predefinite!

 
Beh, è da lì che avresti dovuto iniziare, a giudicare dalla struttura che hai dato nel primo post
 
FAQ:
Beh, questo è un buon punto di partenza, basato sulla struttura che mi hai dato nel primo post.


Sì, ho capito. Quindi quali opzioni ho? Sono davvero bloccato su questo punto. Ho bisogno di qualche soluzione almeno. Come passare queste variabili alle classi? Voglio la comodità, ecco perché lo chiedo...

 
hoz:

Ho strutture che hanno bisogno di una sola istanza. Naturalmente, non è consigliabile creare diversi oggetti in diverse classi di queste strutture.

Così sono arrivato alla conclusione che, in questo caso, il modo più ragionevole è usare il patternsingleton.

Giusto?

Sbagliato.

Usa il modificatore externt.

 

Giusto?

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:

Giusto?


strana logica.


ma non volete rendere esterna un'istanza della struttura?

 
sergeev:

strana logica.


Perché non fate un'istanza della struttura extern?

Non è scritto da nessuna parte di questi momenti. Come faccio a sapere come fare? Non conosco nessuno dei programmatori che conosco. E alcuni di loro riescono ancora ad entrare nel forum e a prendermi in giro.

Giusto?

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:

Non dice nulla di questi momenti. Come faccio a sapere come fare? Non conosco nessuno dei programmatori che conosco. E alcuni di loro riescono ancora ad entrare nel forum e a prendermi in giro.

Giusto?


Che cos'è questo?

extern Position_Properties::SPos;
Motivazione: