Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
1. Оператор new возвращает указатель, разрабы конечно намудрили с неявными разыменовываниями, поэтому твой вариант и работает, но лучше уж на недокументированные вещи не завязываться.
2. У нас конечно не С++, но очень похоже, поэтому списки инициализации (не знаю насчет эффективности) это кошерно.
проверил, да работает Ваш вариант, и по логике он более правильный:
2019.08.31 22:07:35.196 tst (EURUSD,H1) Strategy_1::Strategy_1
2019.08.31 22:07:35.196 tst (EURUSD,H1) Context::Context
2019.08.31 22:07:35.196 tst (EURUSD,H1) Strategy_2::Strategy_2
2019.08.31 22:07:35.196 tst (EURUSD,H1) Context::Context
2019.08.31 22:07:35.196 tst (EURUSD,H1) Strategy_1::Algorithm
2019.08.31 22:07:35.196 tst (EURUSD,H1) Strategy_2::Algorithm
2019.08.31 22:07:35.197 tst (EURUSD,H1) Strategy_1::Algorithm
указатель и сам объект созданный при инициализации не потерялся, да и метод из интерфейса не заместил собой методы из классов 1 и 2 - вроде все как задумано работает
как избежать повторяющихся участков кода при инициализации? - в конструкторе нельзя
как избежать повторяющихся участков кода при инициализации? - в конструкторе нельзя
Вместо interface делаешь обычный класс. Туда помещаешь *m и делаешь в нем метод bool SomeMethod {if (CheckPointer(m)) return false; m=new...; return true;}
нет, интерфес нужен - очень классно получается что не нужно будет на каждом тике все дергать - сделаю по одному вызову одной стратегии на один тик - в общем пока нравится мне конфиг всего этого, кажется так нужно было мою проблему решать:
немного подправил свой пример - все работает, но по моему должно так выглядеть это:
но почему то если уберу тело метода CStrategy::Algorithm(void) - то будет ошибка: 'Algorithm' - function must have a body
почему ошибка? - ведь объявляю метод CStrategy::Algorithm(void) с модификаторм virtual
немного подправил свой пример - все работает, но по моему должно так выглядеть это:
но почему то если уберу тело метода CStrategy::Algorithm(void) - то будет ошибка: 'Algorithm' - function must have a body
почему ошибка? - ведь объявляю метод CStrategy::Algorithm(void) с модификаторм virtual
virtual void Algoritm()=0;
Не, тоже не пойдет. Если абстракцию объявили, то будте добры реализовывать.
по моему просто компилятор воспринимает метод Algorithm() из интерфейса и объявленную virtual void Algorithm() как разные методы из за модификатора virtual
Абстрактный метод обязателен к реализации в наследниках. Еще раз говорю, ни к чему здесь interface.
интерфейсы нужны, мне удобно в зависимости от настроек советника обьявлять разные поведения для 6 стратегий (там не сколько стратегии а сколько исследование ордерных систем)
сейчас так:
вот и хочу минимизировать само тело методов Algorithm() - если правильно напишу базовый класс - в моем примере выше class CStrategy , то в самих Algorithm() будет ну строк по 5-10 не более
как этот код без интерфейса написать? - сейчас все кратко и останется только дергать сами алгоритмы стратегий каждый тик или реже
как этот код без интерфейса написать? - сейчас все кратко и останется только дергать сами алгоритмы стратегий каждый тик или реже