Hatalar, hatalar, sorular - sayfa 2272

 
fxsaber :

Biri yaratılıyor. Ayrıca, f'de T kullanamazsınız .

Bu başlı başına bir hatadır.
 template < typename T>
void f() { Print ( sizeof ( T )); }
struct A { int a; };
void OnStart ()
{
        f< int >(); //(1)//нормально
        f<A>();   //(2)//нормально
struct B { int b; };
        f<B>();   //(3)//Error: 'B' - undeclared identifier
}
Ve (1)(2) ve (3) arasındaki temel fark nedir???
 
fxsaber :

Üstelik f'de T'yi kullanamazsınız. Genel olarak durum bana göre açık.

Ayrıca, T'yi f'de kullanma yasağınızı ihlal ettim.

 template < typename T>
void f() { class T ; Print ( __FUNCSIG__ , ":" , sizeof ( T )); }
template < typename T1, typename T2>
void g() { class T1 { T2 x; } a; f<T1>(); }
void OnStart ()
{
class A {};
        g<A, int    >();
        g<A, double >();
}

Gördüğünüz gibi hatasız derleniyor ama sonucun absürt olması önemli değil asıl mesele her şeyin "açıklanabilir" olması.

 
Merhaba. Yardım. Altınla anlaşma yapamam, her şey çalışır, yani anlaşma yapamam. İşte neye benzediğinin ekran görüntüleri.
 

Bu koddaki kutsal anlam nedir, neden standart kütüphaneye atıldı?

   if ( IsStopped ( __FUNCTION__ ))
       return ( false );

Artık, örneğin REASON_REMOVE ile OnDeinit'teki standart kitaplıktan pozisyonları veya emirleri kapatma işlevlerini kullanmak mümkün değildir.

 
Stanislav Dray :

Bu koddaki kutsal anlam nedir, neden standart kütüphaneye atıldı?

Artık, örneğin REASON_REMOVE ile OnDeinit'teki standart kitaplıktan pozisyonları veya emirleri kapatma işlevlerini kullanmak mümkün değildir.

Evet, bu bir bug.

 
A100 :

Ayrıca, T'yi f'de kullanma yasağınızı ihlal ettim.

Gördüğünüz gibi hatasız derleniyor ama sonucun absürt olması önemli değil asıl mesele her şeyin "açıklanabilir" olması.

Şablonların ne olduğunu tam olarak anlamıyorsunuz. Ve sadece bazı çiplerle makrolara benzerler.

İşte kod

 template < typename T>
void f() { class T{ MqlTick a; }; Print ( __FUNCSIG__ , ":" , sizeof (T) ); }
template < typename T1, typename T2>
void g() { class T1 { T2 x; } a; f<T1>(); }
void OnStart ()
{
class A {};
        g<A, int    >();
        g<A, double >();
}

çıkaracak

void f < A > (): 68
void f < A > (): 68

Çünkü T, makrolarda olduğu gibi bazı uyarıları olan bir tabandır. Sonuç olarak, bir imzanın oluşturulduğuna sahibiz. Fonksiyonun içinde, fonksiyonda T'nin yerine geçen A'yı kimse bilmiyor. Ancak bu A'yı dahili olarak tanımlarsınız, böylece başka derleme hatası oluşmaz. Bu A'nın aynı ada sahip diğer sınıflarla hiçbir ilgisi olmadığını göstermek için MqlTick'i içeri ekledim.

Kısacası, MQL5'teki işlev içi sınıflar, üst işlevin dışında görünmez. T olarak, sınıf olarak yalnızca türün adı iletilir. Aynı zamanda, başlıkta ebeveyn işlevinden bahsedilmiyor.

Onlar. her şey oldukça mantıklı. Bu bir hata değil, çok sınırlı bir uygulamadır.


Not: Muhtemelen, bir röportajda bir C++ programcısı bunun imkansız olduğunu söyleyecektir.

 template < typename T>
void f() { class T{}; }


MQL5 - oldukça.

 
fxsaber :

Şablonların ne olduğunu tam olarak anlamıyorsunuz.

fxsaber :

Not: Muhtemelen, bir röportajda bir C++ programcısı bunun imkansız olduğunu söyleyecektir.

Bunun C++'da imkansız olduğunu düşünüyorsanız, o zaman bu ben değilim, ancak şablonların ne olduğunu ve nasıl çalıştığını anlamıyorsunuz ... özellikle özensiz bir uygulamayı sınırlı bir uygulamadan ayırt edemediğiniz için

 
A100 :

Bunun C++'da imkansız olduğunu düşünüyorsanız, o zaman bu ben değilim, ancak şablonların ne olduğunu ve nasıl çalıştığını anlamıyorsunuz ... özellikle özensiz bir uygulamayı sınırlı bir uygulamadan ayırt edemediğiniz için

Yorum yaptığınız cümlenin ilk kelimesini okuyun. MQL5'teki şablonlar ve makrolardan anladığım kadarıyla, derleme girişimleri olmadan örneklerinizin MQL5'te derlenmeyeceğini anlıyorum. ++ ile - Neyin karışmadığını bilmiyorum.


Not: C++'ın bu koda tepkisini gösterirlerse minnettar olurum.

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

Hatalar, hatalar, sorular

fxsaber , 2018.09.03 07:16

Not: Muhtemelen, bir röportajda bir C++ programcısı bunun imkansız olduğunu söyleyecektir.

 template < typename T>
void f() { class T{}; }
 
fxsaber :

Not: C++'ın bu koda tepkisini gösterirlerse minnettar olurum.

Reaksiyon, MQL'deki ile aynıdır. Neden farklı olmalı? O desen ve Afrika desen
 
fxsaber :

Şablonların ne olduğunu tam olarak anlamıyorsunuz. Ve sadece bazı çiplerle makrolara benzerler.

evet, artılarla ilgili böyle bir örnek derlenmiyor

 hata: 'struct f()::T' gölgeleri şablonu parametre şablonunun bildirilmesi<typename T>

ama derlese bile sonuç sizi şaşırtacaktı çünkü sınıf adı sadece "T" olacaktı.

 mql farklıysa, yanlıştır