Logo

Вход

Войти с помощью соц. сетей
X
 
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения
ТОП СООБЩЕНИЙ
30.09.2015, 17:46
Лучший ответ
30.09.2015, 19:45
Лучший ответ
Небольшой косметический штрих:
- в классе CQueue, листинг Queue.mqh, удалите строки 75-78 в методе Front, было:
MQL код:
/*!
Возвращает элемент в начале очереди
\param T aValue - псевдопараметр
\return возврат значения типа Т
\remark В методе используется псевдопараметр T null, см. описание класса.
При получении элемента, очередь остается неизменной
*/
template<typename T>
T CQueue::Front(T null) {
T _value;
if(m_data_total - 1 < 0)
return _value;

CValContType *_pvct = GetLastNode();
CValContType *_pvct1 = GetNodeAtIndex(0);
CValContType *_pvct2 = GetNodeAtIndex(1);
CValContType *_pvct3 = GetNodeAtIndex(2);
CValContType *_pvct4 = GetNodeAtIndex(3);
_value = _pvct.GetData(null);
//---
return _value;
}

должно быть:
MQL код:
/*!
Возвращает элемент в начале очереди
\param T aValue - псевдопараметр
\return возврат значения типа Т
\remark В методе используется псевдопараметр T null, см. описание класса.
При получении элемента, очередь остается неизменной
*/
template<typename T>
T CQueue::Front(T null) {
T _value;
if(m_data_total - 1 < 0)
return _value;

CValContType *_pvct = GetLastNode();
_value = _pvct.GetData(null);
//---
return _value;
}

это для отладки класса использовал и забыл подчистить...Нажмите на изображение для увеличения.

Название:	Снимок экрана от 2015-09-30 22:40:39.png
Просмотров:	1
Размер:	159.0 Кб
ID:	25764275
25.10.2015, 13:57
Лучший ответ
В связи с выходом в свет нового функционала в языках MQL4 п. 5 и MQL5 п. 27 в части шаблонов классов, внес некоторые изменения в классы CQueue (очередь) и CStack (стек).
Прим.:
- Создание объектов производится в соответствии с правилами инсталляции (специализации необходимым типом) шаблонов языка С++
- Интерфейс методов классов остался неизменным
- При компиляции появятся два предупреждения о приведении типов, не обращайте на них внимания, это проблема ущербности шаблонных классов
- При создании объектов шаблонных классов не смог добиться выделения памяти в "куче", по всей видимости особенности работы с шаблонами классов
- Рекомендую использовать МТ4 билд не ниже 902 т.к. в билд 900 есть ошибка не дающая нормально компилировать код.
Во вложении архив с листингами классов и файлами примеров.
  • #1 Свернуть

    Контейнеры в стиле STL C++

    В общем тема уже давно требовала к себе пристального внимания. Востребованность в контейнерах стек и очередь периодически всплывает, но из-за ущербности шаблонов в MQL и отсутствии нормальной работы с указателями (отсутствие указателей на фундаментальные типы, отсутствие указателей на функции и методы классов, отсутствие шаблонов классов) как то руки опускались писать все на "костылях". Те кто не в курсе, достаточно трудно реализовать возвращаемое значение функцией (методом) если этот тип заранее не известен. В итоге в одной статейке подглядел интересный костылик - недокументированные возможности MQL :
    MQL код:

    template<typename T, typename C>
    C CClass::Function(T val, C) {
    C _val;
    //--- какой то там код метода...

    //---
    return _val;
    }

    в итоге вот так меня торкнуло что написал пару контейнеров. Может кому пригодится. Всю библиотеку не выкладываю, т.к. она пока еще до конца не переделана, а старые версии библиотеки выкладывать смысла не вижу...
    В архиве каталог с контейнерными классами и каталог с тестами этих контейнеров. В тестах контейнеров есть комментированные строки, это для тех кто хочет убедиться что контейнеры работают с любым фундаментальным типом, как в STL C++. Кстати методы в этих контейнерах имеют название и смысл тот же что и в STL, кому нужно могут посмотреть на cppreference.
    При использовании контейнеров, нужно сообщить объекту класса тип возвращаемого значения, для этого при вызовах методов Top, Back и Front, в качестве параметра метода вставьте любую переменную нужного типа. В общем в примерах все есть...
    PS. Не забываем выложить отзывы о работе контейнеров...
    Последний раз редактировалось Margarita; 30.09.2015, 18:59. Причина: выделены слова по просьбе автора
  • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
  • #2 Свернуть

    Небольшой косметический штрих:
    - в классе CQueue, листинг Queue.mqh, удалите строки 75-78 в методе Front, было:
    MQL код:
    /*!
    Возвращает элемент в начале очереди
    \param T aValue - псевдопараметр
    \return возврат значения типа Т
    \remark В методе используется псевдопараметр T null, см. описание класса.
    При получении элемента, очередь остается неизменной
    */
    template<typename T>
    T CQueue::Front(T null) {
    T _value;
    if(m_data_total - 1 < 0)
    return _value;

    CValContType *_pvct = GetLastNode();
    CValContType *_pvct1 = GetNodeAtIndex(0);
    CValContType *_pvct2 = GetNodeAtIndex(1);
    CValContType *_pvct3 = GetNodeAtIndex(2);
    CValContType *_pvct4 = GetNodeAtIndex(3);
    _value = _pvct.GetData(null);
    //---
    return _value;
    }

    должно быть:
    MQL код:
    /*!
    Возвращает элемент в начале очереди
    \param T aValue - псевдопараметр
    \return возврат значения типа Т
    \remark В методе используется псевдопараметр T null, см. описание класса.
    При получении элемента, очередь остается неизменной
    */
    template<typename T>
    T CQueue::Front(T null) {
    T _value;
    if(m_data_total - 1 < 0)
    return _value;

    CValContType *_pvct = GetLastNode();
    _value = _pvct.GetData(null);
    //---
    return _value;
    }

    это для отладки класса использовал и забыл подчистить...Нажмите на изображение для увеличения.

Название:	Снимок экрана от 2015-09-30 22:40:39.png
Просмотров:	1
Размер:	159.0 Кб
ID:	25764275

    Комментарий

    • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
    • #3 Свернуть

      В связи с выходом в свет нового функционала в языках MQL4 п. 5 и MQL5 п. 27 в части шаблонов классов, внес некоторые изменения в классы CQueue (очередь) и CStack (стек).
      Прим.:
      - Создание объектов производится в соответствии с правилами инсталляции (специализации необходимым типом) шаблонов языка С++
      - Интерфейс методов классов остался неизменным
      - При компиляции появятся два предупреждения о приведении типов, не обращайте на них внимания, это проблема ущербности шаблонных классов
      - При создании объектов шаблонных классов не смог добиться выделения памяти в "куче", по всей видимости особенности работы с шаблонами классов
      - Рекомендую использовать МТ4 билд не ниже 902 т.к. в билд 900 есть ошибка не дающая нормально компилировать код.
      Во вложении архив с листингами классов и файлами примеров.
      Последний раз редактировалось coder-ex; 25.10.2015, 14:02.

      Комментарий

      X