Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения - страница 27

 
Artyom Trishkin:
  1. Речь шла о том, что автоматическое удаление подсистемой терминала всех созданных вами объектов и помещённых указателей на них в списки вы назвали костылём, при этом ручное управление своими объектами и создание для этого своих костылей вы костылём не считаете
  2. Об этом речи не было в свете ваших заявлений из п1, и как следствие - основной причине моего вам ответа
  3. И об этом тоже, и по той же причине.

Вы для чего коллекции то создаете, ради коллекций и автоматического удаления объектов?:))) Я вообще не говорил про ручное управление. Откуда вы такое взяли?)

 STL изучите для начала и поймете о чем я вообще говорю

 
Igor Makanu:

как правильно копировать, пример можете привести для этого шаблона?

я пользовался справкой для написания метода AddValue https://www.mql5.com/ru/docs/basis/types/classes

всю голову сломал, но я не вижу в MQL другого решения чем я написал в своем примере!

Вашу реализацию правильного хранения данных покажите 

В вашем случае я это имел ввиду.
void  AddValue (const T &value)  { Tptr = new T(value); mlist.Add(Tptr); }

НО это все-равно неверное решение. Нормальное решение - использовать что-то типа STL. В вашем случае std::list.

Я думаю, что MQL5 не ограничивает в этом. Можно попробовать перевести исходники STL с той же VS на MQL

 
В старом поколении модераторов было как минимум два проф. программиста. сейчас ни одного. и это очень заметно )
 
Andrey Pogoreltsev:
В вашем случае я это имел ввиду.

НО это все-равно неверное решение. Нормальное решение - использовать что-то типа STL. В вашем случае std::list.

Я думаю, что MQL5 не ограничивает в этом. Можно попробовать перевести исходники STL с той же VS на MQL

еще раз повторюсь: MQL это не С++,

и указатель на объект в MQL это по сути хендл, а указатель в С++ это адрес физической памяти

смысл заниматься портированием библиотек С++ один в один на MQL ?

 
Igor Makanu:

еще раз повторюсь: MQL это не С++,

и указатель на объект в MQL это по сути хендл, а указатель в С++ это адрес физической памяти

смысл заниматься портированием библиотек С++ один в один на MQL ?

Чтобы нормально реализовывать паттерны проектирования, а не создавать потенциальные проблемы, используя дженерики.

Вы наверное удивитесь, но указатели для ОС тоже виртуальные. В физические их еще надо преобразовать, но это совсем другой уровень работы с указателями.

Портировать 1 в 1 не получится, а урезанные C++03 можно, думаю. Поддержка шаблонов и операторов имеется же.

 
Andrey Pogoreltsev:

1. Вы наверное удивитесь, но указатели для ОС тоже виртуальные. В физические их еще надо преобразовать, но это совсем другой уровень работы с указателями.

2. Портировать 1 в 1 не получится, а урезанные C++03 можно, думаю. Поддержка шаблонов и операторов имеется же.

1. не удивлюсь

2. ну вот и истина - что даже если Вы соберетесь и сделаете порт из С++, то он все равно будет вызывать вопросы, а почему же не так как в оригинале? - смысл?

Есть стандартная библиотека от MQL, используя ее есть хоть какая то гарантия, что будет обеспечена поддержка от разработчиков в будущем, я уже пару раз обжегся - использовал графические компоненты из статей несколько лет назад написанных, да юзать удобно, очень напоминает работу с компонентами Delphi, но когда начал более серьезные проекты пытаться реализовать - получил кучу вопросов и ни одного ответа от автора статьи

не помню, кто сказал из именитых программеров, но примерно так: код не должен быть красивым или читаемым, он должен выполнять свою задачу

как и наша с Вами беседа, если не ошибаюсь, Вы хотели хранить в списках структуру со своими данными, я показал свою реализацию, которую делал под такие же задачи - моя реализация работает? - она вызывает ошибки выполнения MQL-программы? - мне это интересно выяснить в ходе общения

 

Andrey Pogoreltsev:

C++03 можно, думаю. Поддержка шаблонов и операторов имеется же.

Ну да, успехов ))

 
Igor Makanu:

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

Это верно только до тех пор, пока вы не захотите его доработать.

 

Уже как-то указывал на имеющийся баг в классе CLinkedList, но продублирую.  Начальный и конечный узлы списка там замкнуты друг на друга:  Next последнего узла указывает на первый узел, а Previous первого  - на последний.  В итоге стандартный цикл перебора превращается в бесконечный цикл:

#include <Generic\LinkedList.mqh>

void OnStart()
{
  CLinkedList<string> list;
   
  list.AddLast("One");
  list.AddLast("Two");
  list.AddLast("Three");
  int i=0;
  for (CLinkedListNode<string> *node= list.First();  node!=NULL;  node=node.Next())  // Цикл бесконечно бегает по кругу
    { }
} 

В C# естественно подобной ерунды не наблюдается.  Next последнего узла равен нулю, так же как и Previous начального.

Не знаю, является ли это некой "фичей", придуманной разработчиками (хотя пользы от неё не вижу),  но в любом случае поведение библиотеки должно соответствовать оригиналу.

 
Alexey Navoykov:

Уже как-то указывал на имеющийся баг в классе CLinkedList, но продублирую.  Начальный и конечный узлы списка там замкнуты друг на друга:  Next последнего узла указывает на первый узел, а Previous первого  - на последний.  В итоге стандартный цикл перебора превращается в бесконечный цикл:

В C# естественно подобной ерунды не наблюдается.  Next последнего узла равен нулю, так же как и Previous начального.

Не знаю, является ли это некой "фичей", придуманной разработчиками (хотя пользы от неё не вижу),  но в любом случае поведение библиотеки должно соответствовать оригиналу.

Что за хрень тут опять твориться? Удаляют вполне адекватные посты по теме LinkedList. Так и представляю, сидит где-нибудь в Европе модер-анонимус и удаляет, злобно хихикая, посты у ненавистных русских. Помойка какая-то, пропадает желание писать.

Причина обращения: