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

 
Ilya Malev :

"Yığın taşmasına" tepki verdim")

Hamamböceği gibi görünüyor...

Yani bu bir derleyici değil, zaten çalışma zamanında. Ve derleyici yanıt vermelidir.

Bunu VS 2010'da denedim:

 class A
 {
   public :
   virtual int f2() = 0 ;
 };

class B : public A
{
 public :
   virtual int f2() { return A::f2(); }
};

B b;

Derleme hatası alıyorum: Hata 1 hatası LNK2001: çözülmemiş harici sembol "public: virtual int __thiscall A::f2(void)"

Ve Metaeditor sessizdir. İyi değil.

 
= 0 ile ata işlevine yapılan çağrının kendisine yapılan bir çağrıya dönüştüğü ortaya çıktı. Bu hatayı kendiniz yakalarsanız, belki faydalanabilirsiniz ...
 
Alexey Navoykov :

Derleyicinin bu şekilde tepki vermesi gerekir.

Bunu VS 2010'da denedim:

Derleme hatası alıyorum: Hata 1 hatası LNK2001: çözülmemiş harici sembol "public: virtual int __thiscall A::f2(void)"

Metaeditör sessizdir. İyi değil.

Alexey, lütfen bana parmaklarınla açıkla, eğer mql C'ye benziyorsa, o zaman kesinlikle aynı olmalı ve sola bir adım, sağa bir adım - yürütme?

Geliştiriciler dikkatsizce böyle koydu diye mi? Ancak herhangi bir dil, döngüler ve koşullar üzerine kuruludur. Diğer her şey fragmanda. Bazı nedenlerden dolayı, hiç kimse başka bir dilin OOP açısından veya C'ye başka bir şey açısından benzer olmasını gerektirmez.

 
Alexey Viktorov :

Alexey, lütfen bana parmaklarınla açıkla, eğer mql C'ye benziyorsa, o zaman kesinlikle aynı olmalı ve sola bir adım, sağa bir adım - yürütme?

Geliştiriciler dikkatsizce böyle koydu diye mi? Ancak herhangi bir dil, döngüler ve koşullar üzerine kuruludur. Diğer her şey fragmanda. Bazı nedenlerden dolayı, hiç kimse başka bir dilin OOP açısından veya C'ye başka bir şey açısından benzer olmasını gerektirmez.

Bu tam kimlikle ilgili değil. Buradaki nokta, uygulanan işlevselliğin doğru ve tutarlı bir şekilde çalışması gerektiğidir. Ama önce bağırıyorsun, diyorlar ki, bana farklı çalıştığı başka bir dil göster. Lütfen onlara da sahip çıkın. Ve size farklı (doğru) çalıştığı bir C++ örneği verdikten sonra, MQL'nin C++ olmadığını ve aynı olmaması gerektiğini söyleyerek eski gaydayı başlatıyorsunuz. sen zaten karar ver
 
Alexey Viktorov :

Veya tüm bunların kod yazmayı kolaylaştırabileceği, kısaltabileceği veya en azından hatalardan koruyabileceği bir örnek gösterebilir misiniz? Ve lütfen, soyut işlevlerle değil, bir danışman veya göstergede ticaretin gerçeklerine mümkün olduğunca yakın.

Mümkün değil. Adamlar sadece fantezilerini gerçeğe çekmeye çalışıyorlar.

 
Dmitry Fedoseev :

Mümkün değil. Adamlar sadece fantezilerini gerçeğe çekmeye çalışıyorlar.

Bana gelince, fantezileri gerçeğe çekmek çok faydalı bir meslek. Gelişimin anlamı budur!
Çok anlayışlı bir tartışma. Teşekkür ederim.
 
Alexey Navoykov :

Bu doğru. Ancak uzun zamandır alternatif bir seçenek kullanıyorum: Başlangıçta tüm arayüzleri bir ara şablon sınıfı olarak tasarlıyorum:

Böylece, herhangi bir sayıda bu tür arabirimlerden bir kalıtım zinciri oluşturabilirsiniz. Evet, elbette onlarla dynamic_cast yapamazsınız ama bu çok sık bir ihtiyaç değil. Ana görev, işlevlere transferdir.

Daha dikkatli okudum, bu arada ilginç bir hareketin var. Bunu daha önce düşünmemiştim =) Boş zamanlarımda da deneyeceğim ...

 
Nikolai Semko :
Bana gelince, fantezileri gerçeğe çekmek çok faydalı bir meslek. Gelişimin anlamı budur!
Çok anlayışlı bir tartışma. Teşekkür ederim.

Ve en önemlisi - verimli! Geliştiriciler sonunda bizi duydu ve herkesin yıllardır tökezlediği bu hatayı düzeltmeye karar verdi.

Ancak forumun bazı üyelerinin yıkıcı konumu elbette şaşırtıcı. Ve kendileri gelişmezler - ve inanılmaz bir azimle başkalarına müdahale etmeye çalışırlar.

 

>> Evet, elbette onlarla dynamic_cast yapamazsınız ama bu çok sık bir ihtiyaç değil. Ana görev, işlevlere transferdir.

Evet, neden yapmıyorsunuz, sorunları biliyorsunuz) Ama sonra asıl kabusunuz ortaya çıkıyor - derleme aşamasında döküm hatalarını tespit edememek :)

 
Ilya Malev :

>> Evet, elbette onlarla dynamic_cast yapamazsınız ama bu çok sık bir ihtiyaç değil. Ana görev, işlevlere transferdir.

Evet, neden yapmıyorsunuz, sorunları biliyorsunuz) Ama sonra asıl kabusunuz ortaya çıkıyor - derleme aşamasında döküm hatalarını tespit edememek :)

Evet ve genel durumda hala bir anlam ifade etmiyor. Sonuçta, miras zinciri herhangi bir şey olabilir: en azından Interface<CBase>, en azından Interface<C<B<A<CBase>>>>, sayısız seçenek var. Gerçekçi olmayan tüm olası seçeneklere sırayla CBase yayınlamanız gerekecek.

Arayüzler hakkındaki bilgilerin depolanmasını sınıf nesnesinin kendisinde uygulayacağımı hatırlıyorum. Ve mevcut arabirim pedlerine ek olarak, pedimizde sarmalayıcı olarak çalışacak bağımsız arabirim sınıfları yapın. Evet, ancak o zaman tüm bunların gereksiz ve gereksiz olduğu sonucuna vardım. Herhangi bir arayüze temel sınıf atamak için pratik bir ihtiyaç görmedim. Bu sadece biraz mantıksız. Tek seçenek, sınıfın hata ayıklama amacıyla belirli bir arabirimi destekleyip desteklemediğini bulmaktır, ancak bu, bu şekilde yayınlamayı gerektirmez.