Adwizard/Base/FactorableCreator.mqh
2025-04-11 13:28:40 +03:00

46 lines
4 KiB
MQL5

//+------------------------------------------------------------------+
//| FactorableCreator.mqh |
//| Copyright 2024, Yuriy Bykov |
//| https://www.mql5.com/ru/users/antekov |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019-2024, Yuriy Bykov"
#property link "https://www.mql5.com/ru/users/antekov"
#property version "1.00"
#include "../Utils/Macros.mqh"
// Предварительное определение класса
class CFactorable;
// Объявление типа - указатель на функцию создания объектов класса CFactorable
typedef CFactorable* (*TCreateFunc)(string);
//+------------------------------------------------------------------+
//| Класс создателей, связывающих названия и статические |
//| конструкторы классов-наследников CFactorable |
//+------------------------------------------------------------------+
class CFactorableCreator {
public:
string m_className; // Название класса
TCreateFunc m_creator; // Статический конструктор для этого класса
// Конструктор создателя
CFactorableCreator(string p_className, TCreateFunc p_creator);
// Статический массив всех созданных объектов-создателей
static CFactorableCreator* creators[];
};
// Статический массив всех созданных объектов-создателей
CFactorableCreator* CFactorableCreator::creators[];
//+------------------------------------------------------------------+
//| Конструктор создателя |
//+------------------------------------------------------------------+
CFactorableCreator::CFactorableCreator(string p_className, TCreateFunc p_creator) :
m_className(p_className),
m_creator(p_creator) {
// Добавляем текущий объект создателя в статический массив
APPEND(creators, &this);
}
//+------------------------------------------------------------------+