Скройте конструктор класса в приват области, так что бы только внутренние методы могли к нему обращаться. Создайте статический метод инициализации внутри этого класса. Он будет возвращать ссылку на единственный экзмепляр который и будет создавать если он еще не создан. Есть замечательная книга Паттерны проектирования, где эта техника подробно и доходчиво описана. Если Вы знакомы с Java то перенести этот код на MQL не составит труда.
знаком я даже взял кусок кода из С++
class Singleton { private: Singleton() {} Singleton( const Singleton&); Singleton& operator=( Singleton& ); public: static Singleton& getInstance() { static Singleton instance; return instance; } };
но компилятор ругнулся:
'&' - reference cannot used OrdersStack.mqh 23 14
'&' - reference cannot used OrdersStack.mqh 25 21
'Singleton::Singleton' - cannot call private member function OrdersStack.mqh 26 27
Ну нельзя же настолько слепо сдирать...
Во-первых с приватным конструктором в MQL таки будут проблемы скорее всего.
Во-вторых в примере
Singleton( const Singleton&); Singleton& operator=( Singleton& );
Для этих функций если вы не заметили есть только объявления, без имплементации. Это нужно для того чтобы компилятор ругался при попытке их использовать и в то же время не мог их создать автоматически. В MQL такое опять же не прокатит.
В-третьих про ссылки в MQL можете забыть. Их нет и не будет
Ну нельзя же настолько слепо сдирать...
Во-первых с приватным конструктором в MQL таки будут проблемы скорее всего.
Во-вторых в примере
Для этих функций если вы не заметили есть только объявления, без имплементации. Это нужно для того чтобы компилятор ругался при попытке их использовать и в то же время не мог их создать автоматически. В MQL такое опять же не прокатит.
В-третьих про ссылки в MQL можете забыть. Их нет и не будет
могли бы вы чуть подправить код, как нужно это сделать. идя такова что бы создать класс Стратегия1 и Стратегия2 и в них вызывать Stacksinglton::getInstance().addOrderToStack(.......)
p/s/ я не селен в с++ и никогда в нем не программировал. походу написание на mql вникаю что да как.
попробовал сделать так
class Singleton { private: Singleton(); public: static Singleton getInstance() { return inctance; } }; Singleton::Singleton(){ }
компилятор выдает ошибки (я понимаю по чему)
'inctance' - undeclared identifier 'return' - object required
но когда я делаю так
class Singleton { private: Singleton(); static Singleton instance; public: static Singleton getInstance() { return inctance; } }; Singleton::Singleton(){ }
тут компилятор ругается неожиданно для меня
'Singleton' - struct undefined
при чем тут структура?
Не мучайтесь. Сингелтон может быть полезен в тех случаях, когда действия выполняемые в синглетоне могут потребоваться не при каждом запуске программы. Поскольку здесь это открытие ордеров, значит оно необходимо всегда. Значит достаточно при инициализации эксперта объявить один экземпляр на глобальном уровне и пользоваться им из любого места программы.
От сингетона какой выигрыш? Экономия на его единичной инициализации, в том случае, если при работе программы он не потребовался. Инициализация такого класса - это мизерные затраты. Ну и подумаешь, инициализировали его, а пользоваться не стали.
Не мучайтесь. Сингелтон может быть полезен в тех случаях, когда действия выполняемые в синглетоне могут потребоваться не при каждом запуске программы. Поскольку здесь это открытие ордеров, значит оно необходимо всегда. Значит достаточно при инициализации эксперта объявить один экземпляр на глобальном уровне и пользоваться им из любого места программы.
От сингетона какой выигрыш? Экономия на его единичной инициализации, в том случае, если при работе программы он не потребовался. Инициализация такого класса - это мизерные затраты. Ну и подумаешь, инициализировали его, а пользоваться не стали.
я понимаю что объявить на глобальном уровне, но тогда использовать методы этого класса я смогу только в этом файле. а я хочу использовать метод этого класс (singleton) в любом другом, при этом когда используя метод addToStack(.....) в одном классе, я потом не перетер эти же данные в другом

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
пишу стек для открытия ордеров. и возник вопрос, как мне реализовать синглтон в MQL4. чтобы с любого класа можно было обратиться например так:
Stacksinglton::getInstance().addOrderToStack(.......)
если кто знает, подскажите. я с++ не знаю. я понимаю ООП, знаю JAVA. но как это реализовать здесь mql пока не понял...