Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 112

 
Alexey Navoykov :
Bu arada, genel durumda, bir fonksiyonun dönüş değerinin türü kesinlikle herhangi bir ise, görevin MQL araçları kullanılarak çözülemeyeceği sonucuna vardım. Burada olmayan Decltype gerektirir.

İşaretçi geri dönecek, ancak yapı - düşünmedim. Hepsi aynı, bir bağlantı olmalı.

 
fxsaber :

yani aynı

Şimdi genellikle işleve 3 yerine 2 argüman iletilir:

MacrosFunc(SelectHandle(Memory(A, false )), SelectHandle(Memory(A)) ? B : 0 )
 
Alexey Navoykov :

Şimdi genellikle işleve 3 yerine 2 argüman iletilir:

İki kesinlikle orijinal bir görevdir. Ve üçü onun genellemesi

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Hatalar, hatalar, sorular

fxsaber , 2018.12.21 22:15

NewHandle'ın - bir sabit olabileceğini açıklığa kavuşturacağım. Onlar. geçerli bir arama
time = MACROS( 0 , TimeCurrent ()); // TimeCurrent из 0-хендла.
time = MACROS( 1 , TimeCurrent ()); // TimeCurrent из 1-хендла.

MACROS( 0 , SymbolInfoTick ( _Symbol , Tick)); // SymbolInfoTick из 0-хендла.

#define Bid SymbolInfoDouble ( _Symbol , SYMBOL_BID )
Price = MACROS( 3 , Bid ); // Bid из 3-хендла.
Örneklerle, bir makrodan neyin gerekli olduğu açık görünüyor.
 

Genel olarak, elbette, argümanların hesaplanma sırasına güvenmek şüpheli bir girişimdir. C++ standardında bu sıra tanımlanmamıştır, derleyicinin insafına kalmıştır. Peki ya MQL'de buna ne dersiniz - geliştiricilerle bu düzenin değişip değişmeyeceğini veya gelecekte değiştirmeyi planlayıp planlamadıklarını netleştirmeniz gerekir.

Yani bu daha iyi bir seçenek:

 template < typename T1, typename T2>
T2 MacrosFunc( const T1 handle, const T2 Value )
{
  SelectHandle(Memory(handle, false ));
   return (Value);
}

#define MACROS(A, B) MacrosFunc(A,  SelectHandle(Memory(A)) ? (B) : NULL )
 
Alexey Navoykov :

Genel olarak, elbette, argümanların hesaplanma sırasına güvenmek şüpheli bir girişimdir. C++ standardında bu sıra tanımlanmamıştır, derleyicinin insafına kalmıştır. Peki ya MQL'de buna ne dersiniz - geliştiricilerle bu düzenin değişip değişmeyeceğini veya gelecekte değiştirmeyi planlayıp planlamadıklarını netleştirmeniz gerekir.

Yani bu daha iyi bir seçenek:

Evet, daha güvenilir.

 

Özlüyorum sevgili editör.

Bu kodu nasıl yorumlayacağını anlamadan kodu tercümana vermek... Yüksek ilişkiler.

 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Hatalar, hatalar, sorular

fxsaber , 2018.12.21 10:23

Çözemiyorum lütfen yardım edin. Böyle bir zaman var

 int GetHandle() { return ( 0 ); }

bool SelectHandle( int ) { return ( true ); }
  
int NewHandle = 0 ;  
int PrevHandle = GetHandle();    

datetime time = SelectHandle(NewHandle) ? TimeCurrent () : 0 ;  
SelectHandle(PrevHandle);


Aynı şeyi yapan bir makro nasıl yazılır

time = MACROS(NewHandle, TimeCurrent ()); // Макрос


Sorun, PrevHandle'ın makroda oluşturulamamasıdır.

Çözümümün neden daha kötü olduğunu anlamıyorum, buraya ekleyeceğim:

 // handle_t MACROS_helper_PrevHandle;
int MACROS_helper_PrevHandle;
template < typename T>
T macros_helper_fn(T t)  {SelectHandle(MACROS_helper_PrevHandle); return t;}     
#define MACROS(NEW_HANDLE_, FN_)  ((MACROS_helper_PrevHandle=GetHandle())* 0 == 0 ?     \
                                    SelectHandle(NEW_HANDLE_) ? macros_helper_fn(FN_) : 0 : 0 )

Dikkate değerdir - virgül operatörünün üçlü operatör aracılığıyla uygulanması (peki, ustaca bir şey değil, ama ilk kez karşılaştım).

Net değil - neden tutamaç türünü şablondan sürükleyesiniz? Gerçekten farklı kulp türleri olacak mı, ama bu saçmalık. Ve genel durumdaki tanıtıcı tipi typedef/define ile ayarlanacaktır.

 
pavlick_ :

Çözümümün neden daha kötü olduğunu anlamıyorum, buraya ekleyeceğim:

Dikkate değerdir - virgül operatörünün üçlü operatör aracılığıyla uygulanması (peki, ustaca bir şey değil, ama ilk kez karşılaştım).

Net değil - neden tutamaç türünü şablondan sürükleyesiniz? Gerçekten farklı kulp türleri olacak mı, ama bu saçmalık. Ve genel durumdaki tanıtıcı tipi, typedef/define ile ayarlanacaktır.

Her şey kötü. kolu nedir?

 
Алексей Тарабанов :

Her şey kötü. kolu nedir?

Görevin koşulu görevdi: tanımlayıcı (tanımlayıcı) aracılığıyla değişen belirli bir ortam var ve tek bir makroda uygulamanız gerekiyor:

1. Geçerli tanıtıcıyı hatırla

2. Ortamı yeni tanıtıcıya geçirin

3. İstediğiniz parametreyi ortamdan alın

4. Ortamı eski tutamağa geçirin

5. Dönüş parametresi

 
pavlick_ :

Görevin koşulu görevdi: tanımlayıcı (tanımlayıcı) aracılığıyla değişen belirli bir ortam var ve tek bir makroda uygulamanız gerekiyor:

1. Geçerli tanıtıcıyı hatırla

2. Ortamı yeni tanıtıcıya geçirin

3. İstediğiniz parametreyi ortamdan alın

4. Ortamı eski tutamağa geçirin

5. Dönüş parametresi

Cevap için teşekkürler.