Новая версия платформы MetaTrader 5 build 1640: создание и тестирование собственных финансовых инструментов
MQL5: Добавлена автоматическая генерация неявного оператора копирования для объектов структур и классов. Теперь компилятор автоматически создает операторы копирования, что позволяет писать для объектов простые записи вида b=a:
class Foo
{
int value;
public:
string Description(void){returnIntegerToString(value);};
//--- конструктор по умолчанию
Foo(void){value=-1;};
//--- конструктор с параметрами
Foo(int v){value=v;};
};
//+------------------------------------------------------------------+//| структура, содержащая объекты типа Foo |//+------------------------------------------------------------------+struct MyStruct
{
string s;
Foo foo;
};
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
//---
MyStruct a,b;
Foo an_foo(5);
a.s="test";
a.foo=an_foo;
Print("a.s=",a.s," a.foo.Description()=",a.foo.Description());
Print("b.s=",b.s," b.foo.Description()=",b.foo.Description());
//---Print("b=a");
b=a;
//---Print("a.s=",a.s," a.foo.Description()=",a.foo.Description());
Print("b.s=",b.s," b.foo.Description()=",b.foo.Description());
/*
Результат выполнения;
a.s=test a.foo.Description()=5
b.s= b.foo.Description()=-1
b=a
a.s=test a.foo.Description()=5
b.s=test b.foo.Description()=5
*/
}
В неявном операторе осуществляется почленное копирование объектов.
Если член является объектом, вызывается соответствующий для этого объекта оператор копирования.
Если член является массивом объектов, то перед вызовом соответствующего оператора копирования для каждого элемента принимающий массив увеличивается или уменьшается до нужного размера через ArrayResize.
Если член является массивом простых типов, для копирования используется функция ArrayCopy.
Если член является указателем на объект, копируется сам указатель, а не объект, на который он указывает.
При необходимости можно переопределить поведение и вместо неявного оператора копирования создать собственный вариант с помощью перегрузки.
Спасибо, теперь понятно. Даже не знаю радоваться ли. Ломается совместимость со старым кодом. По-хорошему надо как-то принудительно активировать новый функционал при столь значительных изменениях (через ключи компиляции или #pragma).
Теперь оказывается, что auto_ptr можно скопировать в новом коде (если не заглушить копирующие оператор/конструктор), что приведёт к множественному удалению одного указателя.
Коллеги, кто-нибудь встречал попытки реализовать STL с++ библиотеку (делая поправку на языковые возможности)? Предпочтительно с размещением в кодобазе, поиск говорит, что нет, но врдуг ... . Конечно же не всю, но какие-то базовые вещи: несколько нормальных контейнеров через шаблоны, да тот же auto_ptr (я конечно свой написал, но самонаписание таких примитивов - глупость). Нафига стд мкл нешаблонная и зачем было выдумывать новые имена для методов/классов аналогов в STL не пойму.
По некоторой информации от MQ, они что-то в этом духе готовят в рамках своей стандартной библиотеки. Что именно и насколько полное - я не в курсе. Выяснил это из-за того, что уже некоторое время я пописывал свой собственный вариант. Но в свете такой инфы это дело приостановил, хочу посмотреть, что будет выпущено официально.
MQL5 поменялся.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Новая версия платформы MetaTrader 5 build 1640: создание и тестирование собственных финансовых инструментов
MetaQuotes Software Corp., 2017.07.19 18:03
Новая версия платформы MetaTrader 5 build 1640: создание и тестирование собственных финансовых инструментов
В неявном операторе осуществляется почленное копирование объектов.
При необходимости можно переопределить поведение и вместо неявного оператора копирования создать собственный вариант с помощью перегрузки.
fxsaber
Спасибо, теперь понятно. Даже не знаю радоваться ли. Ломается совместимость со старым кодом. По-хорошему надо как-то принудительно активировать новый функционал при столь значительных изменениях (через ключи компиляции или #pragma).
Например, мой auto_ptr:
Теперь оказывается, что auto_ptr можно скопировать в новом коде (если не заглушить копирующие оператор/конструктор), что приведёт к множественному удалению одного указателя.
Файл MQL5\Include\Controls\SpinEdit.mqh
int MaxValue(void) const { return(m_min_value); }
Как скачать MT4?
Скачиваю файлик mt4setup.exe, устанавливаю, а платформа устанавливается mt5. где взять mt4?
Скачиваю файлик mt4setup.exe, устанавливаю, а платформа устанавливается mt5. где взять mt4?
у своего брокера. Этот вопрос поднимается каждую неделю...
А как потом привязать БРОКЕРСКИЙ mt4 к вашему сайту? Есть статейка или ролик?
На заметку в будущее: http://orf.textologia.ru/definit/bezindikatorniy/?q=532&n=7113
На заметку в будущее
так то да, спасибо
Коллеги, кто-нибудь встречал попытки реализовать STL с++ библиотеку (делая поправку на языковые возможности)? Предпочтительно с размещением в кодобазе, поиск говорит, что нет, но врдуг ... . Конечно же не всю, но какие-то базовые вещи: несколько нормальных контейнеров через шаблоны, да тот же auto_ptr (я конечно свой написал, но самонаписание таких примитивов - глупость).
Нафига стд мкл нешаблонная и зачем было выдумывать новые имена для методов/классов аналогов в STL не пойму.
По некоторой информации от MQ, они что-то в этом духе готовят в рамках своей стандартной библиотеки. Что именно и насколько полное - я не в курсе. Выяснил это из-за того, что уже некоторое время я пописывал свой собственный вариант. Но в свете такой инфы это дело приостановил, хочу посмотреть, что будет выпущено официально.