MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 936

 
Igor Makanu :

다시: 컴파일 오류 가 발생하지 않았다고 해서 템플릿 클래스가 포함되었다는 의미는 아닙니다. CData 클래스 개체는 어디에 있습니까? - 템플릿 선언이 보이지만 그러한 변수는 어디에 있습니까? - 물체?

문제가 해결하는 데 "필수"인 경우 완전히 재현 가능한 코드를 만드십시오. 이것은 ..... 귀하의 재량에 따라 주석이 완전히 없으며 다시 매크로 대체를 사용하는 논리를 이해하지 못합니다.

아마도 그것은 모두 "소금"일 것입니다. 나는 매크로 대체를 거의 사용하지 않습니다. 적어도 매크로를 사용하면 결국 그것이 무엇을 줄 것인지 이해합니다. 귀하의 예에서 그것은 나에게 신비입니다.

네 맞습니다 개체가 생성되지 않았으므로 확인했습니다

 #property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict

#define templ(T)           template < typename T> // задача данного макроса определять int bool double и т.д


#define Vosmas(a,b,c,d,e) /*return*/ (Fun(a,b,c,d,e)) //a- массив, 
                                                     //b- номер строки если нужен
                                                     //c,d- номера измерений если нужны и массив многомерный

int Mas[ 2 ],Mas2[ 2 ][ 2 ],Mas3[ 2 ][ 2 ][ 2 ];

int OnInit ()
{ int Perem= 0 ;
 Perem=Vosmas(Mas, 0 , 0 , 0 , 3 );
 Print ( "Vosmas: " ,Perem); //результат 3
return ( INIT_SUCCEEDED );}

class CData{
public :CData(){};~CData(){};

       int Total( int &mas[]    , int y1= 0 ){ return (mas[y1]);}  
       int Total( int &mas[][]  , int y1= 0 /*,int y=0*/ ){ return (mas[y1][ 0 ]);}
       int Total( int &mas[][][], int y1= 0 /*,int y=0,int u=0*/ ){ return (mas[y1][ 0 ][ 0 ]);}};
       
         
templ(T) T Fun(T &a[], int b, int c, int d, int e){a[b]=e; return (a[b]);}

결과적으로 오버로딩이 불가능하다는 것은 마이너스이고 일반적으로 이러한 프로그래밍 언어와 이러한 클래스를 구축하는 이유이기도 합니다. 오버로딩을 수행할 수 없는 경우에도 모든 것이 정지되고 정적입니다.

 
mql4 개발자에게 편지를 쓰는 방법, 컴파일러 코드를 보는 방법, 정적이지 않도록 추가 기능을 추가할 수 있습니까?
 
Seric29 :

네 맞습니다 개체가 생성되지 않았으므로 확인했습니다

결과적으로 오버로딩이 불가능하고, 일반적으로 왜 그런 프로그래밍 언어와 이러한 클래스를 구축하는지, 오버로딩이 불가능하더라도 모든 것이 죽은 상태이고 정적입니다.

진실?

그들은 몰랐습니다.

그렇다면 사람들은 어떻게 복잡한 것을 작성합니까? 내 마음은 확장 할 수 없습니다 ...

 
Seric29 :

매크로의 임무는 클래스에서 함수를 호출하고 이 함수에 값을 전달하는 것입니다. 매크로는 모든 차원의 배열을 사용할 수 있으므로 이러한 구성표를 작성하려고 합니다. 물론 돌이 많이 있지만 클래스에서 함수를 호출해야 하고 클래스에서 간단한 함수를 호출하는 방법을 모릅니다(제 경우 Total 메서드에는 설명이 없습니다). 도움말에 작성되어 있지 않으며 재전송과 관련된 복잡한 예가 있습니다.

다음은 모든 차원의 배열을 사용하는 매크로의 예입니다. 개발자가 복잡한 요소에 대한 일반적인 작업에서 이러한 기능을 잘라내는 것은 좋지 않습니다.

템플릿 없이도 가능하지만 템플릿이 있으면 물론 더 좋습니다.

원하지 않았지만 터미널을 열었습니다. 예를 들면 다음과 같습니다.

 #property strict
#property show_inputs
//+------------------------------------------------------------------+
//#define templ(T)          template<typename T>// задача данного макроса определять int bool double и т.д

#define Vosmas(a,b,c,d,e)   5
int Mas[ 2 ],Mas2[ 2 ][ 2 ],Mas3[ 2 ][ 2 ][ 2 ]; //объявил массивы которые будут хранить информацию// обработка с помощью классов должна быть любого типа templ(T)
//+------------------------------------------------------------------+
void OnStart ()
  {
   int Perem= 0 ;
   Perem=Vosmas(Mas, 0 , 0 , 0 , 0 );
   Print ( "Vosmas: " ,Perem);
   Perem=Vosmas(Mas2, 0 , 0 , 0 , 0 );
   Print ( "Vosmas: " ,Perem);
   Perem=Vosmas(Mas3, 0 , 0 , 0 , 0 );
   Print ( "Vosmas: " ,Perem); //во всех случаях результат 5
  }
//+------------------------------------------------------------------+

매크로 대체를 주석 처리했는데 코드가 컴파일되므로 작동하지 않습니까? 템플릿을 사용하지 않는 이유와 단순히 언어 키워드를 복제하는 매크로 대체 이유를 세 번 물었습니다.

무엇이 필요한지 이해하지 못할 뿐만 아니라 코드의 일부가 컴파일되지 않을 코드로 무엇을 해야 하는지도 이해하지 못합니다.

추신: 이 템플릿 또는 매크로 대체 - IMHO를 사용하여다차원 배열 을 만들려는 경우 작동하지 않습니다. 포럼을 검색하여 기성품 솔루션을 찾아 사용하십시오.

추신: 나는 확실히 포기합니다. 이 질문은 저를 위한 것이 아닙니다.

 
Seric29 :
mql4 개발자에게 편지를 쓰는 방법, 컴파일러 코드를 보는 방법, 정적이지 않도록 추가 기능을 추가할 수 있습니까?

바지를 머리 위로 덧입는 경우가 아닙니다 :)

 
Artyom Trishkin :

진실?

그들은 몰랐습니다.

그렇다면 사람들은 어떻게 복잡한 것을 작성합니까? 내 마음은 확장 할 수 없습니다 ...

음, 메모리에 대한 액세스가 닫혀 있으면 작성하기 가장 어려운 것이 무엇입니까? 동적 기능으로 작업하는 것이 불가능하고 과부하를 수행하는 것도 불가능합니다. teo는 프로그램을 완료하고 불필요한 사이클을 시작하기 위해 추가로 1000줄의 코드를 작성해야 합니다 및 변수이므로 프로그램 성능은 0입니다.

 
Seric29 :

음, 메모리에 대한 액세스가 닫혀 있으면 작성하기 가장 어려운 것이 무엇입니까? 동적 기능으로 작업하는 것이 불가능하고 과부하를 수행하는 것도 불가능합니다. teo는 프로그램을 완료하고 불필요한 사이클을 시작하기 위해 추가로 1000줄의 코드를 작성해야 합니다 및 변수이므로 프로그램 성능은 0입니다.

글쎄, 프로그램의 구조가 처음에 죽었다면 예, 아니요.

프로그램은 맨 마지막에 작성됩니다. 첫째 - 프로그램 구조에 대한 사려 깊은 접근 방식.

솔직히 5분 만에 달라진 일로 왜 한 달 동안 싸우는지 이해가 안 된다. 정말 이해가 안가네요...

 
Igor Makanu :

원하지 않았지만 터미널을 열었습니다. 예를 들면 다음과 같습니다.

매크로 대체를 주석 처리했는데 코드가 컴파일되므로 작동하지 않습니까? 템플릿을 사용하지 않는 이유와 단순히 언어 키워드를 복제하는 매크로 대체 이유를 세 번 물었습니다.

무엇이 필요한지 이해하지 못할 뿐만 아니라 코드의 일부가 컴파일되지 않을 코드로 무엇을 해야 하는지도 이해하지 못합니다.

추신: 이 템플릿 또는 매크로 대체 - IMHO를 사용하여 다차원 배열 을 만들려는 경우 작동하지 않습니다. 포럼을 검색하여 기성품 솔루션을 찾아 사용하십시오.

추신: 나는 확실히 포기합니다. 이 질문은 저를 위한 것이 아닙니다.

여기에서 Vosmas 매크로가 모든 배열을 허용한다는 사실에 대한 예를 들었습니다. 배열에 대한 유일한 해결책은 동일한 차원의 배열을 사용하는 것입니다. 저는 C ++에서 작동하는 모든 종류의 포인터와 참조 및 동적 함수에 대해 침묵하지만 C ++에서 함수를 파생시키는 문제도 유형을 나타냅니다. 그리고 다른 말도 안되는 말은 너무 정적인 언어입니다. 여기에서 정말 멋진 것을 작성할 수 없습니다.

 
Seric29 :

여기에서 Vosmas 매크로가 모든 배열을 허용한다는 사실에 대한 예를 들었습니다. 배열에 대한 유일한 해결책은 동일한 차원의 배열을 사용하는 것입니다. 저는 C ++에서 작동하는 모든 종류의 포인터와 참조 및 동적 함수에 대해 침묵하지만 C ++에서 함수를 파생시키는 문제도 유형을 나타냅니다. 그리고 다른 말도 안되는 말은 너무 정적인 언어입니다. 여기에서 정말 멋진 것을 작성할 수 없습니다.

C++의 기초를 읽기 시작하면 MQL에는 최소한의 차이점이 있습니다!

추신: 축하합니다. 모든 작업을 수행할 수 있는 범용 매크로를 작성하셨습니다. 배열은 "처리"할 수 있는 가장 쉬운 것으로 재현할 수 있는 예입니다.

 #property strict
#define Vosmas(a,b,c,d,e)   5
int Mas[ 2 ],Mas2[ 2 ][ 2 ],Mas3[ 2 ][ 2 ][ 2 ]; //объявил массивы которые будут хранить информацию// обработка с помощью классов должна быть любого типа templ(T)
//+------------------------------------------------------------------+
void OnStart ()
  {
   int Perem= 0 ;
   Perem=Vosmas(Mas, 0 , 0 , 0 , 0 );
   Print ( "Vosmas: " ,Perem);
   Perem=Vosmas(Mas2, 0 , 0 , 0 , 0 );
   Print ( "Vosmas: " ,Perem);
   Perem=Vosmas(Mas3, 0 , 0 , 0 , 0 );
   Print ( "Vosmas: " ,Perem); //во всех случаях результат 5
   
   class CA{ public : int a;} A;
   class CB{ public : int b;} B;
   class CC{ public : int c;} C;
   class CD{ public : int d;} D;
   class CE{ public : int e;} E;
   Perem=Vosmas(A,B,C,D,E);     Print ( "Vosmas: " ,Perem); //во всех случаях результат 5
   Perem=Vosmas( "УРА" , "Я" , "УЧУ" , "MQL" , "4" );     Print ( "Vosmas: " ,Perem); //во всех случаях результат 5
  }
//+------------------------------------------------------------------+
 
Igor Makanu :

C++의 기초를 읽기 시작하면 MQL에는 최소한의 차이점이 있습니다!

추신: 축하합니다. 모든 작업을 수행할 수 있는 범용 매크로를 작성하셨습니다. 배열은 "처리"할 수 있는 가장 쉬운 것으로 재현할 수 있는 예입니다.

글쎄, 그래서 나는 매크로에 배열을 전달하고 매크로에서 오버로드 된 함수를 호출하고 결과를 반환하는 것을 파악하고 싶었습니다. 원시 작업처럼 보이지만 매크로에서 오버로드 된 함수를 호출하면 녹아웃됩니다. 3가지 기능이 있다는 경고는 매크로에서 오버로드된 호출 기능을 결정하는 기준을 작성해야 하며 여기서 다시 이 검사를 수행하는 방법을 물어야 합니다. 일반적으로 아이디어는 실패했습니다. .