Bunun MQL5'te çalışması için aynı değil iki farklı çıktı diziniz olması gerekir. Ama o zaman imzaların oluşumu için tamamen farklı bir mekanizma olmalı. C++ aynı sonucu yazdırırsa, __FUNCSIG__ fiyatı önemli ölçüde düşer.
Sonuç: C++
void f<g1::A>( g1::A& ) void f<g2::A>( g2::A& )
Gördüğünüz gibi satırlar farklı... fonksiyon imzası kullanılıyor
Onlar. fonksiyonun içinde sınıf imzası yoktur. Bir gün desteklenecektir.
Eski C++ derleyicileri bunu desteklemiyorsa, kaynak kodunda zaten ilk satırda (1) bir hata veriyorlar. Bu nedenle, başlangıçta soru şu şekilde sorulmuştur: Neden bir durumda bir hata var, diğerinde normal?
Her iki durumda da aynı davranış bekleniyordu: ya bir hata ya da hata yok. Ve hata, destek eksikliğinde değil, eşit olmayan davranışta, diğer tüm şeylerin eşit olmasındadır ( bu örnekte olduğu gibi)
Eski C++ derleyicileri bunu desteklemiyorsa, kaynak kodunda zaten ilk satırda (1) bir hata veriyorlar. Bu nedenle, başlangıçta soru şu şekilde sorulmuştur: Neden bir durumda bir hata var, diğerinde normal?
Her iki durumda da aynı davranış bekleniyordu: ya bir hata ya da hata yok. Ve hata, destek eksikliğinde değil, eşit olmayan davranışta, diğer tüm şeylerin eşit olmasındadır ( bu örnekte olduğu gibi)
Yani bu anlaşılabilir. Derleyici, kod boyunca yukarıdan aşağıya doğru gider ve ilerledikçe uygun imzaları üretir. İlk imzayı sorunsuz oluşturdu. İkinciye geliyor - ve bu zaten var. İşte ikinci satırdaki hata.
Yani bu anlaşılabilir. Derleyici, kod boyunca yukarıdan aşağıya doğru gider ve ilerledikçe uygun imzaları üretir. İlk imzayı sorunsuz oluşturdu. İkinciye geliyor - ve bu zaten var. İşte ikinci satırdaki hata.
Ve neden hatasız MQL'de derleniyor?
template < typename T>
void f() { Print ( __FUNCSIG__ ); }
void g1() { class A { int x; } a; f<A>(); }
void g2() { class A { double x; } a; f<A>(); }
voidOnStart ()
{
g1();
g2();
}
Derleme sırasında hata:
Ve (1)(2) ve (3)(4) arasındaki temel fark nedir???
(3)(4) sınıflarını işlevlerin dışında bildirirseniz, hata oluşmaz. Bir fonksiyon içinde bildirilirse oluşur.
Aşağıdaki davranışa ne sebep olabilir?
derlerseniz gösterge düzgün çalışır, yeniden derlerseniz gösterge düzgün çalışmıyor. Test cihazında düzgün çalışıyor mu?
Ne göstergesi?
C++ burada ne çıktı verir ?
Bunun MQL5'te çalışması için aynı değil iki farklı çıktı diziniz olması gerekir. Ama o zaman imzaların oluşumu için tamamen farklı bir mekanizma olmalı. C++ aynı sonucu yazdırırsa, __FUNCSIG__ fiyatı önemli ölçüde düşer.
Sonuç: C++
void f<g1::A>( g1::A& )
void f<g2::A>( g2::A& )
Gördüğünüz gibi satırlar farklı... fonksiyon imzası kullanılıyor
Sonuç: C++
void f<g1::A>( g1::A& )
void f<g2::A>( g2::A& )
Gördüğünüz gibi satırlar farklı... fonksiyon imzası kullanılıyor
MQL5 sorunları
void f<A>(A&)Onlar. fonksiyonun içinde sınıf imzası yoktur. Bir gün desteklenecektir.
Ve eğer sınıf global ise, o zaman C++ hangi satırın çıktısını verir?
void f<::A>( ::A& )
void f<A>( A& )
MQL5 sorunları
Onlar. fonksiyonun içinde sınıf imzası yoktur. Bir gün desteklenecektir.
Eski C++ derleyicileri bunu desteklemiyorsa, kaynak kodunda zaten ilk satırda (1) bir hata veriyorlar. Bu nedenle, başlangıçta soru şu şekilde sorulmuştur: Neden bir durumda bir hata var, diğerinde normal?
Her iki durumda da aynı davranış bekleniyordu: ya bir hata ya da hata yok. Ve hata, destek eksikliğinde değil, eşit olmayan davranışta, diğer tüm şeylerin eşit olmasındadır ( bu örnekte olduğu gibi)
Ve eğer sınıf global ise, o zaman C++ hangi satırın çıktısını verir?
void f<::A>( ::A& )
void f<A>( A& )
İkinci seçenek
Eski C++ derleyicileri bunu desteklemiyorsa, kaynak kodunda zaten ilk satırda (1) bir hata veriyorlar. Bu nedenle, başlangıçta soru şu şekilde sorulmuştur: Neden bir durumda bir hata var, diğerinde normal?
Her iki durumda da aynı davranış bekleniyordu: ya bir hata ya da hata yok. Ve hata, destek eksikliğinde değil, eşit olmayan davranışta, diğer tüm şeylerin eşit olmasındadır ( bu örnekte olduğu gibi)
Yani bu anlaşılabilir. Derleyici, kod boyunca yukarıdan aşağıya doğru gider ve ilerledikçe uygun imzaları üretir. İlk imzayı sorunsuz oluşturdu. İkinciye geliyor - ve bu zaten var. İşte ikinci satırdaki hata.
(3)(4) sınıflarını işlevlerin dışında bildirirseniz, hata oluşmaz. Bir fonksiyon içinde bildirilirse oluşur.
ile ikame edilmiş
o zaman fonksiyon içinde hata yok ... ve temel fark nedir?
Yani bu anlaşılabilir. Derleyici, kod boyunca yukarıdan aşağıya doğru gider ve ilerledikçe uygun imzaları üretir. İlk imzayı sorunsuz oluşturdu. İkinciye geliyor - ve bu zaten var. İşte ikinci satırdaki hata.
Ve neden hatasız MQL'de derleniyor?
Sonuç: MQL C++
void f<A>() void f<g1::A>()
void f<A>() void f<g2::A>()
İmzalar neden burada müdahale olmadan yaratılıyor?
Ve neden hatasız MQL'de derleniyor?
Sonuç: MQL C++
void f<A>() void f<g1::A>()
void f<A>() void f<g2::A>()
İmzalar neden burada müdahale olmadan yaratılıyor?
Biri yaratılıyor. Üstelik f'de T'yi kullanamazsınız. Genel olarak durum bana göre açık.