Erros, bugs, perguntas - página 2472

 

Crio um símbolo personalizado e preencho-o com 25 anos de barras diárias, que devem pesar cerca de 400kb. No entanto, na pasta de símbolos, são criados ficheiros .hcc com um tamanho total de 15 mb! Além disso, tudo isto demora cerca de 20 segundos! Está fora de questão... Como explica isto?

 
Sergey Dzyublik:

Fiquei surpreendido ao descobrir que era possível declarar o typedef com um ponteiro para uma função modelo.
No entanto, a felicidade não durou muito tempo.

Que é do que eu estava a falar
 

Dezenas de "características" e bugs no MT têm sido noticiados recentemente.
Como é que sabemos se vale a pena esperar que sejam fixados ou não?
Por favor, não sugira testar tudo cada vez que uma nova construção é lançada.

(não fixo em MT5(build 2057)) "Strategy Tester: 2 passes planeados, mas na prática um número infinito de passes > 900pc devido ao erro "OnInit critical error"".
(não fixo em MT5(build 2057))"Valor inválido do campo de tamanho de matriz dentro do operador de atribuição padrão para estruturas com matrizes dinâmicas".
(não fixado em MT5(build 2057))"O compilador não vê o construtor de cópias por defeito para a classe ao devolver um objecto de classe por valor de uma função".
(não corrigido em MT5(build 2057))"Compile bug on type cast "in itself" for pattern classes e estruturas "complexas"".
(não fixo em MT5(build 2057))"Quando se trabalha com typedef, a utilização de uma função modelo com especialização explícita não gera código para esta função modelo".
#(não corrigido em MT5(build 2057))"Erro de compilação ao reutilizar a mesma assinatura de função dentro do typedef".
#
(não fixo em MT5(build 2057))"A maior parte das funções das cordas não funcionam com caracteres NULL numa corda (por exemplo: ShortArrayToString, StringInit, StringFill)".
#(não fixo em MT5(build 2057))"A função StringSetLength apenas funciona para "aparar" o comprimento da corda, não para o aumentar.
#(fixado em MT5(build 2057))"Strategy Tester: 750 processos "metatester64.exe"estão em curso".
#
Forum www.mql5.com, ao editar uma mensagem com uma imagem, a imagem anterior não é substituída pela nova".


Sugestões:
"Permitir ao utilizador forçar a geração/apagamento de código para operador de atribuição por defeito (copy constructor)".
"Allow ArrayCopy to copy classes e estruturas "complexas", semelhantes à forma como as estruturas fornecem uma funcionalidade de cópia profunda para qualquer tipo de objecto".
"Fornecer funcionalidade para o utilizador ler/definir valor decapacidade ao trabalhar com arrays dinâmicos".

"Alterações para melhorar a infografia do serviço de Sinais"

 
A100:
Era disso que eu estava a falar.

Omodelo de typedef e a utilização de typedef numa classe de modelo são coisas diferentes.
A segunda opção funciona, mas há um problema de sobreposição de namespace quando se reutiliza uma classe modelo com um tipo diferente.

 
Alexey Navoykov:

Crio um símbolo personalizado e preencho-o com 25 anos de barras diárias, que devem pesar cerca de 400kb. No entanto, a pasta de símbolos cria ficheiros .hcc com um tamanho total de 15 mb! E, além disso, tudo isto demora cerca de 20 segundos! Fora de questão... Como se pode explicar isto?

Dê uma vista de olhos ao que está gravado.

 
fxsaber:

Vejam o que está registado.

Bem, não conheço o formato hcc, por isso não posso verificar o que está no ficheiro. Mas no terminal mostra barras diárias. Quando mudo para um período de tempo mais pequeno vejo as mesmas barras. Aparentemente, também guarda TODOS os períodos de tempo no ficheiro inicialmente, por isso... Pensei que só se salvaram barras de minutos, das quais todos os outros intervalos de tempo são então sintetizados. E o número de barras de minutos, como já foi dito, coincide com as barras de dia, ou seja, há cerca de 7000 barras de minutos no total.

Portanto, tenho uma ideia de que poupa 7000*M1, 7000*M2, 7000*M3, etc., até 7000*D1 num ficheiro. Se assim for, provavelmente irá buscar 15 MB no total. Correcção: cerca de 5 segundos(20 - ao actualizar o histórico existente).

 

Algo está partido no site do fórum: não consigo ver as minhas últimas mensagens.
Por exemplo,isto e isto estão em falta em"Todos os cargos".
E parece que a classificação era de mais de 6000 até há alguns meses atrás. Mas não sei - talvez a classificação esteja a diminuir ao longo do tempo devido a uma menor actividade.

 
class A{
public:
   struct AA{
      uchar data[8];
   };
   static AA obj;
};

AA A::obj = {0};     // OK


template<typename T>
class B{
public:
   struct BB{
      T data[8];
   };
   static BB obj;
};

template<typename T>
BB B::obj = {0};       //'BB' - declaration without type    




void OnStart(){  
   ArrayPrint(A::obj.data);
   //ArrayPrint(BB<int>::obj.data);
}


Actualmente não é possível utilizar uma variável estática declarada dentro de uma classe modelo.
Com a introdução de um namespace, esta restrição pode ser contornada?

 
Sergey Dzyublik:


Actualmente não é possível utilizar uma variável estática declarada dentro de uma classe modelo.
Com a introdução do namespace, poderia esta restrição ser contornada?

Não se trata da variável. Não pode ver a classe BB. Tem de ser tomada fora da classe B como modelo<nome datilografar T> classe BB;

 
Alexey Navoykov:

Não se trata da variável. Não vê a classe BB, precisa de ser movida para fora da classe B comomodelo<nome tipográfico T>classe BB;

O posto foi dirigido a programadores, que se eles "enganarem" o apoio fora da caixa.

Mais uma vez, o problema diz respeito à impossibilidade de utilizar uma variável estática declarada dentro de uma classe modelo.
O que sugere fazer em caso de typedef:

 
class A{
public:
   typedef void (*callback_A)();
   static callback_A f_ptr;

};
callback_A A::f_ptr = NULL;                  // Ok


template<typename T>
class B{
public:
   typedef T (*callback_B)();
   static callback_B f_ptr;
};
template<typename T>
callback_B B::f_ptr = NULL;                  //'callback_B' - declaration without type	

void func_A(){PRINT(__FUNCSIG__);}
int func_B(){PRINT(__FUNCSIG__); return 0;}

void OnStart(){  
   A::f_ptr = func_A;
   A::f_ptr();

   //B<int>::f_ptr = func_B;
   //B<int>::f_ptr();
}
Razão: