OOP, mql5'te şablonlar ve makrolar, incelikler ve kullanım teknikleri - sayfa 19

 
Seric29 :

Bu makro geçersiz olacak, ondan sonucu döndürmek için hesaplanacak bir ifadeye ihtiyacınız var, yani içinde bir fonksiyon çağırmanız gerekiyor, bu sonuca vardım.

Evet, önce bu "sihirli-harika" kodu derlemeye çalışın. Burada bazı adamlar çok şiddetli bir şekilde hayal kuruyorlar, gerçeklikten uzaklaşıyorlar.

 
Vict :

Görevin ne olduğunu ve orada kazı yapıp yapmadığınızı bilmiyorum, ancak hazırlıksız - başka bir yaklaşım:

Böylece işlevin herhangi bir parçasını değiştirebilir (sahip olduğum gibi diziyi doldurmaya gerek yoktur) ve istediğiniz biçimde somutlaştırabilirsiniz.

Bir çeşit pontovnya. İlk önce koda bakın ve düşünün: dizi muhtemelen fonksiyonlara iletilen veya bu değere ölçeklenen sayılarla doldurulacak...

 
Dmitry Fedoseev :

Bir çeşit pontovnya. İlk önce koda bakın ve düşünün: dizi muhtemelen fonksiyonlara iletilen veya bu değere ölçeklenen sayılarla doldurulacak...

Etkilenmedim, tamam, ben s*ktim.

 
Vict :

İçine bir alt algoritma yapıştırabileceğiniz, tabiri caizse, belirli bir sorunu çözmek için onu "keskinleştirebileceğiniz" bir algoritmanız var. Aslına bakarsanız - sanal fonksiyonların analogu . Ana şeyi kendiniz istediniz, ama şimdi nedenini bilmiyorsunuz))), içinde bir döngü kaydırdığınız bir çerçeveniz vardı.

Bu çerçeveye kod eklemek istedim ve böylece her şey bir sonuç verecekti ve çerçevem void olarak çalışıyor ve onu anlamaya çalışıyorum. Farklı boyutlardaki dizilerle çalışması için ona ihtiyacım var.

 
Vict :

Başka bir işleve işaretçiilettiğiniz bir işlevi çağırın (örneğin, döngü gövdesi)

 int for3( int a, int b, int c, void (*loop)()) {
         for ( int i= 0 ; i<a; i++)
                 for ( int j= 0 ; j<b; j++)
                         for ( int k= 0 ; k<c; k++) 
                                loop();
         return 4 ;
}


mql4, işlev işaretçileriyle çalışmaz, geliştiriciler bile bunu yapmadı.

İşte bulduğum bir şey

 typedef int (*MyFuncType)( int , int );

int addition ( int a, int b)
{ return (a+b); }

int subtraction ( int a, int b)
{ return (a-b); }

int operation ( int x, int y, MyFuncType myfunc)
{
   int g;
   g = myfunc(x,y);
   return (g);
}

int OnInit ()
{
   int m,n;
   m = operation ( 7 , 5 , addition);
   n = operation ( 20 , m, subtraction);
   Print (n);
   return ( INIT_FAILED );   //just to close the expert
}
 
Her makrodan değer döndürmenin mümkün olmadığı anlamına gelir kim bilir?
 
Seric29 :
Her makrodan değer döndürmenin mümkün olmadığı anlamına gelir kim bilir?

Bir makrodan hiçbir şekilde değer döndüremezsiniz. Makro, bir kod parçasının başka bir kod parçasıyla değiştirilmesidir.

 
Dmitry Fedoseev :

Bir makrodan hiçbir şekilde değer döndüremezsiniz. Makro, bir kod parçasının başka bir kod parçasıyla değiştirilmesidir.

Açık ve doğru cevap için çok teşekkür ederim.

 
Pekala, sanki tamamen doğru değilmiş gibi, makro üçlü bir operatöre ?: veya bir virgül operatörüne (µl cinsinden değil) genişletilebilir ve buradan bir değer döndürebilirsiniz.
 
Vict :
Pekala, sanki tamamen doğru değilmiş gibi, makro üçlü bir operatöre ?: veya bir virgül operatörüne (µl cinsinden değil) genişletilebilir ve buradan bir değer döndürebilirsiniz.

C++'da üçlü operatörler daha gelişmiştir, eğer koşul doğruysa, birkaç eylem gerçekleştirebilirsiniz ve mql4 hala belleğe erişimi kapattı, bu nedenle, 10 yıl boyunca geliştiriciler önemli değişiklikler yapmadılar ve yapmadılar. yaratılmış kayda değer işlevler (yalnızca renkler ve metinlerle çalışan işlevler vardır ve başka hiçbir şey normal aptallık değildir ve başka bir şey değildir).