MQL5'te OOP hakkında sorular - sayfa 80

 
Vladimir Simakov :

Katılıyorum)) Bu artı benim)))

buraya yazarken her şey böyle gelişti

onlar. olumlu değil, mucl'de önceki seçenek doğru şekilde çalışacak mı?

JSONObject * CActor::getJSONObject( const string json) const
{
   JSONParser parser;
   JSONValue  *jv = parser.parse(json);
   if (jv != NULL && jv.isObject() && (EACTOR_TYPE)(((JSONObject *)jv).getInt( "ActorType" )) == ActorType) return (jv);
   Print ( __FUNCTION__ + "parser error, json = " ,json);
   delete jv;
   return ( NULL );
}
 
Igor Makanu :

buraya yazarken her şey böyle gelişti

onlar. olumlu değil, mucl'de önceki seçenek doğru şekilde çalışacak mı?

Bu seçenek evet

Yalnızca iki örtük dynamic_cast'i var
 
Vladimir Simakov :

1) Vurgulanan. Yalnızca sonraki satırda kontrol et))) Örnekte, yaratıcısı ya, tam tersi, önce kontrol et, sonra yayınla)
2) JSONObject içinde bir halef görünüyorsa, neden düşsün?

1) Aslında bu konu çerçevesinde aynı kod birkaç gündür tartışılıyor: burada ve burada ve burada .
Kütüphanenin kullanıcı kullanım örneklerinden birinde bir sorun bulmuş olmaları - aferin, teşekkürler.
Ancak kütüphaneyi bir bütün olarak kullanma mantığında sorundan bahsetmişsiniz ama aslında sorunun belirli bir örnekle ilgili olduğu ortaya çıktı.

2) Bir şeyin düşmesi gerektiği ifadesini nerede gördünüz?
Hayır, çok daha kötü olabilir - kod iyi çalışır, ancak yanlış bir sonuç verir.

 
Sergey Dzyublik :

2) Bir şeyin düşmesi gerektiği ifadesini nerede gördünüz?
Hayır, çok daha kötü olabilir - kod iyi çalışır, ancak yanlış bir sonuç verir.

Tabii ki IMHO, ama eğer bir kütüphanedeysem, bir nesneye temel sınıfa bir işaretçi ile eriştiğimde, tanımsız davranış alıyorum, o zaman bu kütüphane kılavuzuna yansıtılmalı (orada mı?), ama olmalı böyle olma)

 
Sergey Dzyublik :

Hayır, çok daha kötü olabilir - kod iyi çalışır, ancak yanlış bir sonuç verir.

olası değil, örneğim temel sınıftan bir yöntemdir, JSONObject * yürütmenin sonucudur, bu ayrıştırıcıya bir işaretçidir ve varis yönteminde json ayrıştırması, "çivilenmesi" gereken alınan işaretçiyle gerçekleşir. daha önce bahsettiğim sorularım

oldukça fazla kontrol var, önerilen örnekte 3 adet var ve türetilmiş sınıfta getInt (), getDouble () yöntemlerine yapılan her çağrı kontrollerle gerçekleşiyor

 
Vladimir Simakov :

Tabii ki IMHO, ama eğer bir kütüphanedeysem, bir nesneye temel sınıfa bir işaretçi ile eriştiğimde, tanımsız davranış alıyorum, o zaman bu kütüphane kılavuzuna yansıtılmalı (orada mı?), ama olmalı böyle olma)

Yine yirmi beş, işaretçiler ve işaretçiler olmayanlar, kılavuzlar vb. ile ne ilgisi var. ?
Örneğinizde, MANTIĞIN bir kısmı işlevden, yani jv.isObject() denetiminin dışına atılacaktır.
Bu MANTIK, dynamic_cast aracılığıyla bir kontrol ile değiştirilmiştir.
Kütüphanenin mevcut sürümü için her şey yolunda, ancak teorik olarak, bir sonraki sürümde temel sınıf olarak JSONObject kullanan yeni bir sınıf belirirse, örneğinizin onunla doğru çalışabileceği bir gerçek değildir. .

 
Sergey Dzyublik :

Yine yirmi beş, işaretçiler ve işaretçiler olmayanlar, kılavuzlar vb. ile ne ilgisi var. ?
Örneğinizde, MANTIĞIN bir kısmı işlevden, yani jv.isObject() denetiminin dışına atılacaktır.
Bu MANTIK, dynamic_cast aracılığıyla kontrol edilerek değiştirildi.
Kütüphanenin mevcut sürümü için her şey yolunda, ancak teorik olarak, bir sonraki sürümde temel sınıf olarak JSONObject kullanan yeni bir sınıf belirirse, örneğinizin onunla doğru çalışabileceği bir gerçek değildir. .

Yani diğer seçenek de onunla çalışamayacak)

 
Andrei Trukhanovich :
UB yoktur, mql cast, dynamic_cast'i de içerir . yanlış bir işaretçi durumunda sadece her şey düşecek.

Bu mu? dynamic_cast durumunda, sonucu NULL olarak kontrol ederseniz hiçbir şey düşmez. Normal bir döküm ile hemen düşecektir. Yoksa ben mi anlamadım?

 
Vladimir Simakov :

Tabii ki IMHO, ama eğer bir kütüphanedeysem, bir nesneye temel sınıfa bir işaretçi ile eriştiğimde, tanımsız davranış alıyorum, o zaman bu kütüphane kılavuzuna yansıtılmalı (orada mı?), ama olmalı böyle olma)

Artılarda, bir istisna oluşmalıdır. Ve yazarlara bir mektup, çünkü bir istisna iyi değil, sadece bir fiş. Mql'de böyle bir şey yoktur, bu yüzden sınıflar tam bir protokolle geleceğe yönelik bir gözle icat edilir.

Tartışılan json hakkında - sadece 2 seçenek var, ya yazarın tarzını ve kararlarını takip edin ya da kendi çatalınızı yapın. Kötü olandan başka. 😉

 
Vladimir Simakov :

Ve haklı olarak))) Üssünden halefine ASLA doğrudan yayın yapamazsınız - bu UB ( TANIMLANMAMIŞ DAVRANIŞ )

Artı tarafta, bizim için tanıdık ve kullanışlı olan standart döküm operatörü aracılığıyla bağlantıların (yukarı veya aşağı) yayınlanması genellikle tehlikelidir.