Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Başka bir deyişle, yazdıklarımı tekrarladınız. Soru, yapıp yapamayacağı değil, neden yapamadığı ve onu zarafetle nasıl aşacağıydı.
dönüşümler için basit işlevler yazmak ve yöntemlerin içinde geçiş yapmamak için?
double Double(CParametre<double>)
string Dize(CParameter<double>)
ve kullan :
PrintFormat ("%s %s %f",String(param1),String(param2),Double(param1));
ve tekli bir operatör veya adlandırılmış bir işlev kullanmanın farkı nedir? işlev daha iyidir - operatör zaten anlamsal bir yüke sahiptir ve keyfi olarak değiştirmek buz değildir
Tip kontrolü kayboldu. Bu soruların yanıtları için C++ kaynaklarına bakın. Sanırım çok sık soruluyorlar.
En azından bunun bir mql sınırlaması değil, genel olarak C++'ın bir özelliği olduğunu anladım ve bunun için teşekkürler :)
Açık aşırı yükleme ve aritmetik eylemlerle her şey açıktır. Evet, aşırı yüklenmiş = bu durumda açıkça daha başarılı, doğru fark ettiniz, sadece bir soru için aceleyle bir örnek oluşturdum ve gerçekten düşünmedim (sayı sadece int değil, aynı zamanda char, uchar, short, ushort, uint, bool ve color, yani her şey açık değil))))))
Burada soru, aşırı yüklenmiş yöntemin dönüş türünün nesnenin içeriğine bağlı olmasıdır.
Örneğin bir multi-type dizimiz var (çoklu kitap olduğu için örnek vermeyeceğim). Ve elbette, herhangi bir dizide, karşılık gelen dizine sahip değişkenin değerini döndüren bir dizin oluşturma işlemi [] olmalıdır.
Ancak değişkenlerin farklı türleri vardır. Bu dizin altında bir tarih olabilir veya bir dize veya hatta bazı özel türler olabilir. Ve ideal olarak, [] dizine eklerken döndürülen değerin türünün, açıkça parametreleştirmeye gerek kalmadan karşılık gelen türü otomatik olarak üretmesini isterim. Daha önce, bu "problemi" şu şekilde çözmüştüm: var[(char)1], var[(short)1], var[(uint)1], vb. ama bu koltuk değnekleri iyi değil.
Bir dizi mqlparam tipi yapı kullanın.
Bir dizi mqlparam tipi yapı.
Aynı şekilde double, string veya long olarak eşitleyemezsiniz.
MqlParam par;
par.double_value = Sor;
çift d = par; // '=' - yasadışı işlem kullanımı
Aynı şekilde double, string veya long olarak eşitleyemezsiniz.
MqlParam par;
par.double_value = Sor;
çift d = par; // '=' - yasadışı işlem kullanımı
Hangi türe bakarsınız ve ilgili alana uygun olursunuz. Çarpık bir yaklaşım gibi görünüyor ve hala mükemmel çözümü arıyorsunuz. Böyle bir görev hiç ortaya çıkmamalıdır.
Ve aşırı yüklenmiş operatörü belirli bir nesneye veya yapıya bağlamadan operatörleri aşırı yüklemenin imkansızlığı, bu da C++'ın bir özelliği mi?
İşte internette bu konuda yazdıkları:
Yalnızca dönüş türlerinde farklılık gösterirlerse, işlev aşırı yüklemesi mümkün değildir.
C++14 13.1/2 standardı:
Bunu benzer bir soruya yanıt olarak web'de buldum:
Anladığım kadarıyla, burada "operator T ()" yayın operatörü aşırı yüklenmiş, bu da C++'da bunun en azından mümkün olduğu anlamına geliyor. Ve mql'de, anladığım kadarıyla henüz değil.
benzer bir soru: neden, bir yöntem aşırı yüklenirken ( aşırı yüklenmiş bir yöntemin imzasında ), dönüş türü görünmüyor, yalnızca parametre türleri görünüyor. yani, farklı dönüş türleriyle iki özdeş yöntem tanımlayamazsınız. neden böyle bir kısıtlama var? bunun anlamı nedir, aynı parametrelerle dönüş değerinin türüne göre yöntemi aşırı yüklemek neden imkansız
Muhtemelen bu yüzden:
Hangi fonksiyon çağrılmalıdır?
Muhtemelen bu yüzden:
Hangi fonksiyon çağrılmalıdır?
Muhtemelen derleme aşamasında bir şablon uyuşmazlığı hatası oluşturulmalıdır.
Ancak bir dizi nesnesinin olduğu bir durumda
Böyle bir hata oluşmamalıdır, çünkü ilk durumda, Array[int] çağrısı, = işleminin sol parametresi olarak kullanılır ve bir çift değişken değildir ve ikinci durumda, sağdaki gibi ve sol parametre, double türünde bir değişkendir.
Yani, sonunda konu, yazma işlemini (örtük dahil) aşırı yükleme olasılığını, yani bir yöntem çağrısının bağlamını belirleme ve beklenen dönüş değerinin türüne bağlı olarak mql'ye sokma arzusuna indirgenir. bu bağlamda istediğiniz kodu çağırın. Ve bağlam açıkça tanımlanmadıysa, bir hata atın.