Criação de SlickEdit para trabalhar com e compilar documentos MQL4/5. - página 10

 
CArrayObj *CSelect::ByOrderProperty(
CArrayObj *list_source,ENUM_ORDER_PROP_INTEGER property,long value,ENUM_COMPARER_TYPE mode)
  {
   if(list_source==NULL) return NULL;
   CArrayObj *list=new CArrayObj();
   if(list==NULL) return NULL;
   list.FreeMode(false);
   ListStorage.Add(list);
   int total=list_source.Total();
   for(int i=0; i<total; i++)
     {
      COrder *obj=list_source.At(i);
      if(!obj.SupportProperty(property)) continue;
      long obj_prop=obj.GetProperty(property);
      if(CompareValues(obj_prop,value,mode)) list.Add(obj);
     }
   return list;
  }

Aqui está um exemplo da biblioteca deArtyom Trishkin, tudo é bom apenas um, mas: O autor tem muitos invólucros não utilizados, como afirma que serão utilizados mais tarde, mas agora é para notas, lembretes.
Quero utilizar a sua biblioteca, mas não é possível fazê-lo sem orientação no código sem editores adicionais que permitam o colapso do código. Quando folheia todo o código no MetaEditor do princípio ao fim, já se esquece o que queria. Estou cansado de usar todos os add-ons possíveis no editor padrão como Ctrl+g, mais caneta e papel!

Pergunta:

list.FreeMode(false);
list_source.At(i);

Quando passamos um parâmetro a um método por ponteiro ou criamos um ponteiro a uma classe, caso contrário não é possível a MQL (ou isto ). SlickEdit recusa-se a definir métodos de classes passadas por ponteiro, o que é uma definição estrita de MQL.
Mas se mudarmos o operador do ponteiro (*) para operador de referência (&), tudo se torna visível e até funciona auto-definindo os membros da classe. Mas isto não é permitido na MQL!

Daí a questão de como e onde colocar o (*) ponteiro do operador para que seja tratado no SlickEdit como (&) operador.

 
BmC:

Aqui está um exemplo da biblioteca deArtyom Trishkin, tudo é bom apenas um, mas: O autor tem muitos invólucros não utilizados, como afirma que serão utilizados mais tarde, mas agora é para notas, lembretes.
Quero utilizar a sua biblioteca, mas não é possível fazê-lo sem orientação no código sem editores adicionais que permitam o colapso do código. Quando folheia todo o código no MetaEditor do princípio ao fim, já se esquece o que queria. Estou cansado de usar todos os add-ons possíveis no editor padrão como Ctrl+g, mais caneta e papel!

Pergunta:

Quando passamos um parâmetro a um método por ponteiro ou criamos um ponteiro a uma classe, caso contrário não é possível a MQL (ou isto ). SlickEdit recusa-se a definir métodos de classes passadas por ponteiro, o que é uma definição estrita de MQL.
Mas se mudarmos o operador do ponteiro (*) para operador de referência (&), tudo se torna visível e até funciona auto-definindo os membros da classe. Mas isto não é permitido na MQL!

Daí a questão de como e onde colocar o (*) ponteiro do operador para que seja tratado no SlickEdit como (&) operador.

Receio que (&) e (*) os operadores não possam ser anulados (não por culpa da SE).

deve estar a trabalhar com MQL5 como com C++ em SE? não sei o que aconselhar.... tentar trabalhar como com C#.

 
Andrey Dik:

Receio que (&) e (*) os operadores não possam ser anulados (não por culpa da SE).

provavelmente trabalhar com MQL5 como com C++ no SE? não sabe o que aconselhar.... tentar trabalhar como com C#.

Estou a trabalhar como uma linguagem de utilizador e não C# e C++, pois penso que as macros tratarão os operadores (* e &) de forma diferente em situações diferentes.

 
BmC:

Estou a trabalhar como uma linguagem personalizada e não C# e C++, pois penso que as macros tratarão os operadores (* e &) de forma diferente em situações diferentes.

é possível criar e trabalhar com uma linguagem personalizada no SE? eu não estava ciente disso.

quis dizer o seguinte:


 

É possível definir, apenas na versão profissional, a sua própria língua. Como se afirma na ajuda ao criar a sua própria língua não especificada no guia SlickEdit, está perante uma configuração de macro mais avançada, por isso estou à procura desta macro que está configurada para procurar métodos aninhados numa classe passada por ponteiro.
Descobri que o objecto C++ passado pelo ponteiro (*) implica utilizar operador (->) em vez de (.) em MQL. Assim, se substituir ou aplicar comandos de compilação condicional numa macro ao definir uma linguagem personalizada, estes operadores serão substituídos. Isto significa que não posso utilizar definições das línguas C# ou C++ sugeridas neste caso, uma vez que na realidade quero alterar a estrutura de acesso do operador.

Descarreguei a versão 25 e agora estou a ajustá-la. Li em fóruns que tem definições mais flexíveis para ligar línguas personalizadas. Vou tentar criar tanto uma linguagem personalizada como no modelo C# e C++ e ver qual é a melhor e talvez publique as instruções sobre a criação da versão 25.

 
BmC:

É possível definir, apenas na versão profissional, a sua própria língua. Como se afirma na ajuda ao criar a sua própria língua não especificada no guia SlickEdit, está perante uma configuração de macro mais avançada, por isso estou à procura desta macro que está configurada para procurar métodos aninhados numa classe passada por ponteiro.
Descobri que o objecto C++ passado pelo ponteiro (*) implica usar operador (->) em vez de (.) em MQL. Assim, se substituir ou aplicar comandos de compilação condicional numa macro ao definir uma linguagem personalizada, estes operadores serão substituídos. Isto significa que não posso utilizar definições das línguas C# ou C++ sugeridas neste caso, uma vez que na realidade quero alterar a estrutura de acesso do operador.

Descarreguei a versão 25 e agora estou a ajustá-la. Li em fóruns que tem definições mais flexíveis para ligar línguas personalizadas. Vou tentar criar tanto a linguagem personalizada como o modelo C# e C++ e ver qual deles é melhor e talvez publique as instruções para a criação da versão 25.

Sim, só queria dizer que se for possível criar um idioma personalizado, pode tentar fazê-lo: criar um idioma personalizado, transferir as definições dos idiomas prontos do ficheiro de idioma CPP ou C# correspondente e depois tentar alterar o comportamento dos operadores correspondentes.

 
Andrey Dik:

Sim, só queria dizer que se for possível criar um idioma personalizado, então pode tentar fazer isto: criar um idioma personalizado, transferir configurações de idiomas prontos do ficheiro de idioma CPP ou C# correspondente e depois tentar alterar o comportamento dos operadores correspondentes.

foi assim que o fiz, os ajustes precisam de ser transferidos APENAS de c# (CSharp) pois é mais adequado para a passagem de objectos por referência. Em c++ (cpp) em vez de operador (.) tem de inserir operador (->) para se referir a métodos de objectos.

Segundo problema ao criar linguagem personalizada, a coloração não é passada através de definições de cópia na versão 25, ou é apenas o tanque SlickEdit v25.0.2.0 64-bit. (Tenho a certeza que é falha dos programadores com a coloração, tudo funcionou na versão anterior, parou nesta).