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

 

Daha dün bu hatayı soyut yöntemlerle tartıştık, bu yüzden bugün kodumda aynı şeye rastladım) Daha önce, temel sınıfta sanal yöntem soyut değildi, bu yüzden ona kalıtsal sınıflardan başvurdum, sonra yapmaya karar verdim. yöntem özet, ancak derleyici rapor vermedi, artık ona başvuramam. Sonuç olarak, özyineleme hatası - en aşağılık ve tespit edilmesi zor olan, çok zaman öldürdü. Şimdi, varsayılan soyut yöntem gövdesine sahip bu özelliğin , en azından hata düzeltilene kadar burada çok yararlı olacağını düşünüyorum.

 
Alexey Navoykov :

Evet, pirzolalara sinek atamak mümkün olduğunca uygun olacak ve kimse gözünü bile kırpmadı)

Atama sürecinde pirzolalara sineklerde bir azalma varsa (veya imkansızsa bir hata verilirse), bunda yanlış bir şey yoktur.

Alexey Navoykov :

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

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

1. "Sadece A sınıfı", (sınıf) parametrelendirmesi olmadan rastgele tipte bir alan içeremez. Ve tarif ettiğim tefli danslar olmadan, referansa ve değere göre bir sınıf parametresiyle tek tip iş yapmak imkansızdır.

2. Sizin için zaten bir mantra gibi görünüyor - bu durumda, F'nin T olduğunu garanti eden kesinlikle açık bir kayıt, yani ikinci bir şablon kaydı yokmuş gibi. ama hayır. Yine, "Yıllar sonra hata ayıklayacağım"))))))

 
Ilya Malev :

1. "Sadece A sınıfı", (sınıf) parametrelendirmesi olmadan rastgele tipte bir alan içeremez. Ve tarif ettiğim tefli danslar olmadan, referansa ve değere göre bir sınıf parametresiyle tek tip iş yapmak imkansızdır.

2. Sizin için zaten bir mantra gibi görünüyor - bu durumda, F'nin T olduğunu garanti eden kesinlikle açık bir kayıt, yani ikinci bir şablon kaydı yokmuş gibi. ama hayır. Yine, "Yıllar sonra hata ayıklayacağım"))))))

Neden bu konuya cevap veriyorsun? Bir yerde kod, başka bir yerde tartışma...)

1. Evet, her şey insanca ve neredeyse dans etmeden yapılabilir:

 struct __A
{
   template < typename T>
   void f(T&) { }   // Сюда структуры и классы
};

struct A : __A
{
   template < typename T>  
   void f(T) { }   // Сюда простые типы и указатели
};

2. Orada başka bir şeyle ilgili gibi görünüyordu. Konu bu değil.

 
Alexey Navoykov :

Neden bu konuya cevap veriyorsun? Bir yerde kod, başka bir yerde tartışma...)

1. Evet, her şey insanca ve neredeyse dans etmeden yapılabilir:

2. Orada başka bir şeyle ilgili gibi görünüyordu. Konu bu değil.

Görünüşe göre henüz hangi dalda daha uygun olduğuna karar verecek bir moderatör değilsin. Ve moderatörler, özelliklerin tartışılmasının özelliklerin kendi başlığında değil, ayrı bir başlıkta, yani. burada.

Açıklamanızda, bir sınıf yöntemine referansa ve T tipinin değerine göre tek tip bir şekilde nasıl erişileceği hiç açık değil. Neden bahsettiğinizi bilmiyorum, ama ben orada bundan bahsediyordum.

 
Ilya Malev :

Görünüşe göre henüz hangi dalda daha uygun olduğuna karar verecek bir moderatör değilsin. Ve moderatörler, özelliklerin tartışılmasının özelliklerin kendi başlığında değil, ayrı bir başlıkta, yani. burada.

Yani moderatör taşınmak isterse - bir şey. Neden kendi başınıza kafa karışıklığı yaratıyorsunuz? Mesela dallar arasında koşmak gibi bir arzum yok.

 
Alexey Navoykov :

Yani moderatör taşınmak isterse - bir şey. Neden kendi başınıza kafa karışıklığı yaratıyorsunuz? Mesela dallar arasında koşmak gibi bir arzum yok.

Moderatörün büyük olasılıkla bunu yapacağını anlarsanız - moderatörün yapmasını beklemeden kendiniz yapmak her zaman daha iyidir. Ancak moderatörlerin eylemlerinin tartışılması da moderatörlerin favori menüsünde yer almıyor, bu yüzden onu durdurursak daha iyi olur.

 
Alexey Navoykov :
 Сюда простые типы и указатели

Bu arada, işaretçiler için, T * argümanıyla sadece ayrı bir yöntem yapmak mantıklıdır, çünkü kesinlikle herhangi bir karışıklık olmayacaktır ve çoğu zaman işaretçilerin işlenmesinin sıradan türlerden farklı olması gerçeğinde bir fayda vardır. (geçerlilik kontrolü, silme vb.)

 
Alexey Navoykov :

Bir yerde kod, başka bir yerde tartışma

Kod burada:

 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 ; }
 };

Aslında, bu girişin yanı sıra bir çözüm daha var: değere göre iletilen tüm basit türleri ada göre listeleyin ve ardından şablon yöntemini & ile yazın, o zaman da hata olmayacaktır. Bu seçenek, kendi parametrelendirmesi olmayan sınıflar için uygundur.

 
Ilya Malev :

Moderatörün büyük olasılıkla bunu yapacağını anlarsanız - moderatörün yapmasını beklemeden kendiniz yapmak her zaman daha iyidir. Ancak moderatörlerin eylemlerinin tartışılması da moderatörlerin favori menüsünde yer almıyor, bu yüzden onu durdurursak daha iyi olur.

Moderatör kesinlikle tartışmayı farklı bölümlere ayırmaz. Böyle bir hevesle, muhtemelen " moderatörün yapmasını beklemeden") kendinizi yasaklamaya bile hazırsınız.)
 
Ilya Malev :

Moderatörün büyük olasılıkla bunu yapacağını anlarsanız - moderatörün yapmasını beklemeden kendiniz yapmak her zaman daha iyidir. Ancak moderatörlerin eylemlerinin tartışılması da moderatörlerin favori menüsünde yer almıyor, bu yüzden onu durdurursak daha iyi olur.

1. Yine de, bu "bir şeyin" olduğu yerde hemen bir şey hakkında konuşmak ve moderatörün bunu nasıl yapacağını düşünmemek daha iyidir. Ve sonra her şey gerçekten iki dalda bulanıklaştı ve şimdi, moderatör tartışmanın orada veya orada olması gerektiğine karar verse bile, gönderilerin sırasını ve anlamlarını koruyarak tartışmayı yeniden planlamak normaldir, çok zaman alan bir iştir .

2. Moderatörün eylemlerinin tartışılması her hapşırma değildir ... Bu, eylemlerinin genel ve kamuya açık bir yarışması başlarsa, ayrıca düzeni yeniden sağlamak veya öfkeli olanları sakinleştirmek için eylemler başlar. Ve eğer kendi fikriniz varsa, o zaman bunu ifade etmenizi kim yasaklıyor? Belki fikriniz çok mantıklı bir öneri ama moderatörün sevilmeyen menüsü altına girmemek için söylemekten çekiniyorsunuz? Yani bu saçmalık :)