46 lines
4 KiB
MQL5
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);
|
|
}
|
|
//+------------------------------------------------------------------+
|