Est-il possible d'implémenter un modèle singleton dans MQL4 ? - page 4

 
FAQ:

Ne serait-il pas plus simple d'utiliser des variables prédéfinies et des structures standard ?

J'aimerais voir un exemple. Je lis sur toute une page que je suis en train de réinventer la roue, alors qu'aucune alternative n'a été suggérée...
 
exemple de quoi ?
 

Montrez-moi donc où, dans les variables prédéfinies, se trouvent les autres types de la structure de base que j'ai citée ?

Je ne parle pas spécifiquement de cette structure, mais de cette technique en général.

Par exemple, voici la structure des propriétés de la position :

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;

Des variables prédéfinies également ? Il n'existe pas de telles variables prédéfinies !

 
C'est par là que vous auriez dû commencer, à en juger par la structure que vous avez donnée dans le premier message.
 
FAQ:
Eh bien, c'est un bon point de départ, sur la base de la structure que vous m'avez donnée dans le premier message.


Oui, j'ai compris. Alors quelles sont les options qui s'offrent à moi ? Je suis vraiment bloqué sur ce point. J'ai besoin d'une solution au moins. Comment passer ces variables aux classes ? Je veux du confort, c'est pourquoi je demande...

 
hoz:

J'ai des structures qui ne nécessitent qu'une seule instance. Bien entendu, il n'est pas recommandé de créer plusieurs objets dans différentes classes de ces structures.

J'en suis donc arrivé à la conclusion que, dans ce cas, le moyen le plus raisonnable est d'utiliser le modèlesingleton.

N'est-ce pas ?

Faux.

Utilisez le modificateur externe.

 

N'est-ce pas ?

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:

N'est-ce pas ?


Une logique étrange.


mais ne voulez-vous pas faire une instance de la structure extern ?

 
sergeev:

Une logique étrange.


Pourquoi ne pas faire une instance de la structure extern ?

Il n'est écrit nulle part que de tels moments existent. Comment puis-je savoir comment le faire ? Je ne connais aucun des programmeurs que je connais. Et certains d'entre eux arrivent encore à se rendre sur le forum et à se moquer de moi.

N'est-ce pas ?

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:

Il ne dit rien sur de tels moments. Comment puis-je savoir comment le faire ? Je ne connais aucun des programmeurs que je connais. Et certains d'entre eux arrivent encore à se rendre sur le forum et à se moquer de moi.

N'est-ce pas ?


Qu'est-ce que c'est ?

extern Position_Properties::SPos;