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

 
Bu konu ile ilgili olmayan yorumlar " OOP, şablonlar, mql5'te makrolar, incelikler ve kullanım teknikleri " bölümüne taşınmıştır.
 

Burada olup olmadığını hatırlamıyorum, ama birileri için faydalı olabilir. Parametreli bir sınıfın yöntemini yalnızca bu öznitelikle aşırı yüklemeniz gerektiğinde, değere veya başvuruya göre aynı türden bir argüman alır (yapılar yalnızca başvuruya göre, basit türler çoğunlukla değere göre iletilir). Bu, bu şekilde yapılabilir (ayrıca, ikinci şablon, & olmadan varyanta uygulanmalıdır, aksi takdirde yapılara göre temel tipleme derlenmez)

 template < typename T>
class A
 {
public :
  A* operator <<(T&p){ Print ( "<< &" , typename (T)); return & this ; }
   template < typename F>
  A* operator <<(F p){ Print ( "<< " , typename (F)); return & this ; }
 };

void OnStart ()
 {
     double ask= Ask ,bid= Bid ;
     MqlTick mt;
    A< double > a1;
    a1<< Ask << Bid <<ask;
    A< MqlTick > a2;
    a2<<mt; 
 }

Burada tartışma.

 
Ilya Malev :

Burada olup olmadığını hatırlamıyorum, ama birileri için faydalı olabilir. Parametreli bir sınıfın yöntemini yalnızca bu öznitelikle aşırı yüklemeniz gerektiğinde, değere veya başvuruya göre aynı türden bir argüman alır (yapılar yalnızca başvuruya göre, basit türler çoğunlukla değere göre iletilir). Bu, bu şekilde yapılabilir (ayrıca, ikinci şablon, & olmadan varyanta uygulanmalıdır, aksi takdirde yapılara göre temel tipleme derlenmeyecektir)

Daha sonra, bir yapı tipine yönelik bir sınıfın herhangi bir sayısal türü kabul edebileceği ortaya çıktı. Ve onlarla ne yapmalı?

 
Alexey Navoykov :

Daha sonra, bir yapı tipine yönelik bir sınıfın herhangi bir sayısal türü kabul edebileceği ortaya çıktı. Ve onlarla ne yapmalı?

Bu durumda, sınıf, hem yapılar hem de basit tipler için karma bir türe yöneliktir, aksi takdirde bu yapı anlamsızdır. F'de gereksiz tipleri kabul etmemek için typename (F), sizeof (F) vb. için bir çek yazabilirsiniz.

 
Ilya Malev :

Bu durumda, sınıf, hem yapılar hem de basit tipler için karma bir türe yöneliktir, aksi takdirde bu yapı anlamsızdır. F'de gereksiz tipleri kabul etmemek için typename (F), sizeof (F) vb. için bir çek yazabilirsiniz.

typename, gereksiz türlerin alınmasına karşı koruma sağlamaz ) Bunu yapmak için, uygun tür ile aşırı yüklenmiş bir özel yöntem yapmanız gerekir.

Ve eğer sınıf herhangi bir türe yönelikse, o zaman neden onu bir şablon parametresiyle parametrelendirerek kafa karışıklığı yaratalım? Sadece böyle bir koltuk değneğinde kullanılırsa. Koltuk değneği için daha basit seçenekler olmasına rağmen, şablon sınıfları olmadan.

 
Alexey Navoykov :

sınıf herhangi bir türe yönelikse, neden onu bir şablon parametresiyle parametrelendirerek kafa karışıklığı yaratıyorsunuz?

Peki herhangi bir şey olabilen istediğiniz türü herhangi bir parametrelendirme yapmadan nasıl kabul edersiniz? Türü belirtmeden bir parametre veya alan bildiremezsiniz. Örneğin, rastgele bir veri türü için "sarmalayıcı" bir sınıf olabilir.

Alexey Navoykov :

typename, gereksiz türleri kabul etmeye karşı koruma sağlamaz)

typename(F)==typename(T) yazarsanız, bu koruma sağlayacaktır.

 
Ilya Malev :

Peki herhangi bir şey olabilen istediğiniz türü herhangi bir parametrelendirme yapmadan nasıl kabul edersiniz? Türü belirtmeden bir parametre veya alan bildiremezsiniz. Örneğin, rastgele bir veri türü için "sarmalayıcı" bir sınıf olabilir.

Peki, o zaman sadece A sınıfı. Parametresinin sınıfın davranışıyla hiçbir ilgisi yoksa neden bir şablon ilan edelim?

İlya Malev :

typename(F)==typename(T) yazarsanız, bu koruma sağlayacaktır.

Bu kesinlikle teneke. Tür denetimini çalışma zamanına taşıyın... Kodlarınızın yıllar sonra hatalarının ayıklanması gerekecek

 
Söyle bana, lütfen, beş için her zamanki takip eden durağı nerede görebilirim?
 
Nikita Chernyshov :
Söyle bana, lütfen, beş için her zamanki takip eden durağı nerede görebilirim?

iSAR iOsMA EA - İzleyen

 
Vladimir Karputov :

iSAR iOsMA EA - İzleyen

Teşekkür ederim!