Erros, bugs, perguntas - página 2660

 
Igor Makanu:

precisa de uma identificação - agente local no testador, não sabe porque não existe tal funcionalidade

TerminalInfoString(TERMINAL_DATA_PATH);
 

Vou repetir isto para que não se perca na aleatoriedade)

1. por favor aconselhar se eu abrir o gráfico ChartOpen(), então como posso voltar a concentrar-me (actividade, visibilidade) no meu gráfico, a partir do qual funciona a minha EA, sem o fechar.

2. quem sabe porque Bid, Ask não coincide com o preço do gráfico Close[0]https://www.mql5.com/ru/forum/160683/page1082#comment_15152111

 
fxsaber:

Sim, eu estava à procura disso, não pensei que fosse o local a procurar

É assim que se obtém o número de um agente.

string path = TerminalInfoString(TERMINAL_DATA_PATH);
string agent = StringSubstr(path,StringLen(path)-4);
 

erro de compilação MT5 (build 2342) ao chamar uma função modelo com tipos de argumentos explícitos, quando chamada a partir de uma função sobrecarregada sem modelo.

template<typename T>
class B{
public:
   void func(const T value){
      printf("1\r\n");
      func<T>(value);             //'func<int>' - ambiguous call to overloaded function with the same parameters        
   };
   
   template<typename TT>
   void func(const TT){
      printf("2\r\n");
   };
   
};


void OnStart(){
   B<int> b;
   b.func(1);
   b.func(1.1);
}
 

O Bug MT5 (build 2342) gera um erro de compilação ao gerar código para uma função de modelo, embora exista uma função de modelo sobrecarregada com uma assinatura adequada para os parâmetros passados.
C++ online:https://onlinegdb.com/HyxjmV-DVI

#ifdef __cplusplus
    #include <iostream>
#endif


class C{
public:
   struct A{
      char aaa;
   };
   
   template<typename T>
   void test(A&, T&, T&, void* = NULL){
      printf("1");
   }
   
   template<typename T>
   void test(T&, T&, T&){
      printf("2");
   }
};

struct B : public C::A{
   char data;
};

struct D{
   char data;
};


void OnStart(){
   C c;

   B b;
   D d;
   
   c.test(b, b, b);    // should be: 2       
   c.test(b, d, d);    // should be: 1       //Compile Error: template parameter ambiguous, could be 'B' or 'D'
}

int main(){
   OnStart();
   return 0;
}
 
Sergey Dzyublik :

O Bug MT5 (build 2342) gera um erro de compilação ao gerar código para uma função de modelo, embora exista uma função de modelo sobrecarregada com uma assinatura adequada para os parâmetros passados.
C++ online: https://onlinegdb.com/HyxjmV-DVI

Alguma vez ouviu falar de Metaquotes sobre todo o trabalho duro de teste que faz?
 

Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

Insectos, insectos, perguntas

Sergey Dzyublik, 2020.02.28 22:21

class C{
public:
   struct A{
      char aaa;
   };
};

struct B : public C::A{
   char data;
};
Nunca implementei esta funcionalidade, obrigado.
 
Alain Verleyen:
Alguma vez ouviu falar de Metaquotes sobre todo o trabalho duro de teste que faz?

Sim e não.
Nenhuma queixa da minha parte, mas uma boa palavra nunca faz mal.

 
Não há forma de resolver o seguinte problema:
Como obter uma "especialização parcial" para a função de teste para distinguir os parâmetros a serem passados e executar um algoritmo diferente em cada caso?
Terei todo o prazer em ajudar, obrigado.

C++ online com comportamento esperado(https://onlinegdb.com/rycNVNDN8).
class C{
public:
   struct A{
   public:
      char aaa;
      
      A (char value = 0) : aaa(value){}
      void set(char value){
         aaa = value; 
      };
      char get(){return aaa;}
   };
   
   void test(A&, A& a1, A& a2){
      printf("1");
      a1.aaa = a2.aaa;
   }
   
   template<typename T>
   void test(A&, T& d1, T& d2){
      printf("2");
      d1.set(d2.get());
   }
};

struct B : public C::A{};


struct D{
private:
   char data;
public:  
   D(char value = 0) : data(value){}
   void set(char value){
      data = value; 
   };
   char get(){return data;}
};


void OnStart(){
   C c;

   B b;
   D d;
   
   c.test(b, b, b);    // 2      should be: 1
   c.test(b, d, d);    // 2      should be: 2   
}
 
Sergey Dzyublik:
Não há forma de resolver o seguinte problema:
Como obter "especialização parcial" para a função de teste para distinguir parâmetros transferidos e executar algoritmos diferentes em cada caso?
Terei todo o prazer em ajudar, obrigado.
class C{
public:
   struct A{
      char aaa;
   };
   
   /*void test(A&, A&, A&){
      printf("1");
   }*/
   
   template<typename T>
   void test(A&, T&, T&){
      if (sizeof(T)==sizeof(A)) printf("1");
      else                      printf("2");
   }
};

struct B : public C::A{
   char data;
};

struct D{
   char data;
};


void OnStart(){
   C c;

   B b;
   D d;
   
   c.test(b, b, b);    // 2      should be: 2 
   c.test(b, d, d);    // 1      should be: 1    
}