forked from antekov/Adwizard
		
	
		
			
				
	
	
		
			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);
 | 
						|
}
 | 
						|
//+------------------------------------------------------------------+
 |