Biblioteca de classes genéricas - bugs, descrição, perguntas, recursos de uso e sugestões - página 27

 
Artyom Trishkin:
  1. Eu quis dizer que a remoção automática pelo subsistema terminal de todos os seus objectos criados e colocar apontadores para eles em listas a que chama muleta, e não considera o manuseamento manual de objectos e a criação de muletas para o fazer uma muleta
  2. Isso não fazia parte do que disse em #1, e é a principal razão pela qual lhe disse.
  3. Isso também, e pela mesma razão.

Para que é que criam colecções, para colecções e eliminação automática de objectos?) Eu não disse nada sobre a operação manual. De onde tirou isso?)

Estude o STL e compreenderá do que estou a falar.

 
Igor Makanu:

como copiar correctamente, pode dar um exemplo para este modelo?

Utilizei a ajuda para escrever o método AddValuehttps://www.mql5.com/ru/docs/basis/types/classes

Eu esmaguei o meu cérebro, mas não vejo nenhuma outra solução em MQL do que a que escrevi no meu exemplo!

Mostrem-me a vossa implementação do correcto armazenamento de dados.

Era isso que eu queria dizer no seu caso.
void  AddValue (const T &value)  { Tptr = new T(value); mlist.Add(Tptr); }

Mas esta solução está errada de qualquer forma. Uma solução normal é utilizar algo como STL. No seu caso std::list.

Penso que a MQL5 não a limita. Pode tentar traduzir fontes STL do mesmo VS para MQL

 
Na antiga geração de moderadores havia pelo menos dois programadores profissionais. agora não há nenhum. e é muito perceptível )
 
Andrey Pogoreltsev:
É a isso que me refiro no seu caso.

Mas continua a ser a solução errada. A solução normal é usar algo como STL. No seu caso std::list.

Não me parece que a MQL5 não a limite. Pode tentar traduzir o código fonte STL de VS para MQL

Mais uma vez: MQL não é C++,

e um ponteiro para um objecto em MQL é de facto uma pega, e um ponteiro em C++ é um endereço de memória física.

para que serve portar as bibliotecas C++ para a MQL ?

 
Igor Makanu:

Mais uma vez: MQL não é C++,

e um ponteiro para um objecto em MQL é de facto uma pega, e um ponteiro em C++ é um endereço de memória física

para que serve portar as bibliotecas C++ para a MQL ?

Implementar correctamente os padrões de concepção em vez de criar potenciais problemas utilizando genéricos.

Deve ficar surpreendido mas as indicações para o sistema operativo também são virtuais. Ainda é necessário convertê-los em físicos, mas este é um nível de trabalho completamente diferente com apontadores.

Não será capaz de portar 1 em 1, mas penso que será capaz de portar um C++03 despojado. O apoio de modelos e operadores está disponível.

 
Andrey Pogoreltsev:

1. Pode ficar surpreendido, mas as indicações para o SO também são virtuais. Ainda precisam de ser convertidos em físicos, mas isso é todo um outro nível de manuseamento de ponteiro.

2. Não poderá portar 1 em 1 mas poderá portar o C++03 descascado. O apoio de modelos e operadores também existe.

1. eu não ficaria surpreendido

2. bem, aqui está a verdade - mesmo que se juntem e façam um porto a partir de C++, isso ainda causará dúvidas, mas porque não como no original? - qual é o objectivo?

Existe uma biblioteca padrão de MQL, utilizando-a pelo menos algum tipo de garantia de que o apoio será fornecido pelos desenvolvedores no futuro. Já fui queimado algumas vezes - usei componentes gráficos de artigos escritos há alguns anos, é fácil de usar, tal como trabalhar com componentes Delphi, mas quando comecei a tentar implementar projectos mais sérios recebi muitas perguntas e nenhuma resposta do autor do artigo

Não me lembro quem dos programadores proeminentes disse, mas algo como isto: o código não deve ser bonito ou legível, deve cumprir a sua tarefa

como a nossa discussão, se não me engano, queria armazenar uma estrutura com os seus dados em listas, eu mostrei-lhe a minha implementação, que desenvolvi para a mesma tarefa - a minha implementação funciona? - causa erros de tempo de execução em programas de MQL? - Estou curioso em saber no decurso da conversa

 

Andrey Pogoreltsev:

C++03 é possível, penso eu. Está disponível apoio para modelos e operadores.

Bem, sim, boa sorte ))

 
Igor Makanu:

O código não tem de ser bonito ou legível, tem de fazer o seu trabalho

Isto só é verdade até que o queiram refinar.

 

Já apontei este erro na classe CLinkedList, mas vou repeti-lo. Os nós inicial e final da lista estão fechados um ao outro: o próximo do último nó aponta para o primeiro nó, enquanto o anterior do primeiro nó aponta para o último. Como resultado, o laço padrão de pesquisa transforma-se num laço infinito:

#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())  // Цикл бесконечно бегает по кругу
    { }
} 

Em C# tal disparate não é naturalmente observado. O Próximo do último nó é zero, bem como oAnterior do primeiro nó.

Não sei se é alguma "característica" inventada pelos criadores (embora não veja a sua utilidade), mas em qualquer caso o comportamento da biblioteca deve corresponder ao original.

 
Alexey Navoykov:

Já apontei este erro na classe CLinkedList, mas vou repeti-lo. Os nós inicial e final da lista estão fechados um ao outro: o próximo do último nó aponta para o primeiro nó, enquanto o anterior do primeiro nó aponta para o último. Como resultado, o laço padrão de pesquisa transforma-se num laço infinito:

Em C#, naturalmente, não há tal disparate. O Próximo do último nó é zero, bem como oAnterior do primeiro nó.

Não sei se esta é alguma "característica" inventada pelos criadores (embora não veja qualquer benefício dela), mas em qualquer caso o comportamento da biblioteca deve corresponder ao original.

Que diabos se passa aqui outra vez? Eles estão a apagar perfeitamente bons posts da LinkedList. Assim mesmo, algures na Europa, um moderador anónimo está a apagar postos de russos odiados, enquanto ressona maliciosamente. Que lixeira, não lhe dá vontade de escrever.

Razão: