¿Es posible implementar un patrón singleton en MQL4? - página 4

 
FAQ:

¿No sería más fácil utilizar variables predefinidas y estructuras estándar?

Me gustaría ver un ejemplo. Estoy leyendo una página entera en la que se dice que estoy reinventando la rueda, aunque no se sugiere ninguna alternativa...
 
ejemplo de lo que es el "mundo".
 

Muéstrame, entonces, ¿dónde están en las variables predefinidas los otros tipos de la estructura básica que he citado?

No hablo específicamente de esta estructura, sino de esta técnica en general.

Por ejemplo, esta es la estructura de las propiedades de posición:

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;

¿También variables predefinidas? No existen estas variables predefinidas.

 
Bueno, por ahí deberías haber empezado, a juzgar por la estructura que has dado en el primer post
 
FAQ:
Bueno, es un buen punto de partida, basado en la estructura que me diste en el primer post.


Sí, lo entiendo. ¿Qué opciones tengo entonces? Estoy realmente atascado en este punto. Necesito alguna solución al menos. ¿Cómo pasar estas variables a las clases? Quiero comodidad, por eso pregunto...

 
hoz:

Tengo estructuras que sólo necesitan una instancia. Por supuesto, no es recomendable crear varios objetos en diferentes clases de estas estructuras.

Así que llegué a la conclusión de que, en este caso, lo más razonable es utilizar el patrónsingleton.

¿Verdad?

No es así.

Utiliza el modificador externt.

 

¿Verdad?

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:

¿Verdad?


una lógica extraña.


¿pero no quieres hacer una instancia de la estructura externa?

 
sergeev:

una lógica extraña.


¿Por qué no haces una instancia de la estructura externa?

No está escrito en ninguna parte sobre esos momentos. ¿Cómo sé cómo hacerlo? No conozco a ninguno de los programadores que conozco. Y algunos todavía se las arreglan para entrar en el foro y burlarse de mí.

¿Verdad?

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:

No dice nada sobre esos momentos. ¿Cómo sé cómo hacerlo? No conozco a ninguno de los programadores que conozco. Y algunos todavía se las arreglan para entrar en el foro y burlarse de mí.

¿Verdad?


¿Qué es esto?

extern Position_Properties::SPos;