Üretim kodunda typeid
kullanmak genellikle kötü bir uygulama mıdır? Ayrıca, bazı meta verileri içeren (typeid
) type_info
döndürdüğünü fark ettim (türün adına sahip bir dize gibi); Bunu devre dışı bırakmanın bir yolu var mı?C++: Üretim kodunda typeid kullanma
cevap
Belirli bir dil özelliğini kullanmanın "kötü" veya "iyi" olup olmadığını söylemek zor. Gerçekten nasıl kullandığınıza bağlı. İş için doğru bir araçsa typeid
'u kullanmayla ilgili yanlış bir şey yoktur, ancak çözdüğünüz herhangi bir sorun için daha iyi bir çözüm varsa, daha iyi bir çözüm için typeid
'u kullanmaktan kaçınmalısınız.
typeid
'u kullanmak genellikle iyi bir fikir değildir, çünkü kullanımı genellikle devralma ve sanal işlevler kullanılarak önlenebilir. Sisteminizi bu şekilde güncelleyebiliyorsanız, bunu yapmak iyi bir fikir olabilir.
numaralı ürününüzün std::type_info
numaralı ürüne geri dönüp dönmemesine bağlı olarak, bu durum performans sorunlarına neden olmamalıdır. typeid
, bir const std::type_info&
değerini değerlendirir; dolayısıyla, içerdiği dize bilgilerinin tümünü kopyalamaz. Çoğu uygulama, nesnenin sanal işlev tablosunda saklanan gerçek std::type_info
nesnesine sahiptir, böylece dahili olarak hiçbir kopyalama yapılmaz.
- Tipid ile ne yaptığınıza bağlı olarak değişir. Eğer polimorfizmi kullanman gereken yeri kullanıyorsan tabii ki bu kötü. Bununla birlikte, müşterilerin makinelerinde hata ayıklamak için izler ya da bunun gibi şeyleri boşaltma gayet iyi.
- Tek yol, derleyicinizde RTTI'yi devre dışı bırakmaktır. Bunu yapmanın standart bir yolu yok. Not Bu,
dynamic_cast
'u da devre dışı bırakır.
- 1. Yönetilmeyen C++ kodunda C# özelliklerini kullanma
- 2. Üretim ortamında DropCreateDatabaseIfModelChanges'i kullanma
- 3. Üretim olarak Kentor.AuthServices.StubIdp'yi kullanma IDP
- 4. CTP4 Kodunda CreateSourceQuery'yi Kullanma İlk
- 5. typeid (karmaşık <double> (0.0,1.0)) = typeid (1.0i)
- 6. özü C# kodunda 7zip
- 7. Oyuncu C# kodunda tırmanış kodu
- 8. C kodunda GPA hesap makinesi
- 9. C# kodunda DataTemplate nasıl oluştururum?
- 10. LuaSQL kodunda C/C++ değerini atama
- 11. Typeid aracılığıyla bir sınıfın sayısal benzersiz tanıtıcısı
- 12. Typeid neden her zaman false döndürüyor?
- 13. Bir polimorfik nesnede typeid kullanıldığında, tanımlanmalı mı?
- 14. Hızlı dosyaları objektif olarak kullanma c
- 15. JPA ile Üretim ve Üretime Yönelik Farklı Veritabanı Sağlayıcılarını Kullanma
- 16. C# kodunda yakalanmamış özel durumları bulma
- 17. C# system.nullreferenceKullanıcı kodu kullanıcı kodunda ele alınmıyor
- 18. C++ kodunda tekrarı ortadan kaldırır mısınız?
- 19. En iyileştirilmiş C kodunda derleme kodu yedeklemesi
- 20. C++ kaynak kodunda CMake Değişkeni nasıl okunur?
- 21. printf ve wprintf, tek C kodunda
- 22. C++ içinde C adlarını kullanma
- 23. "Üretim şubesi" üretim sunucusuna gitme "Doğru" yolu
- 24. dev/hazırlama/üretim dev ve üretim için
- 25. Python Reindex Üretim Nan
- 26. üretim sistemi
- 27. Raylar 3.1 varlıklar üretim
- 28. Nesnenin C nesnesini kullanma?
- 29. C++ içinde XGBOOST kullanma
- 30. C# Dispatcher'ı kullanma
Büyük olasılıkla 'typeid' başvurularını bir kitaplık çağrısından döndürmek istemezsiniz. Eşleme işlemini kontrol ettiğiniz bir 'int 'gibi bir' typeid '' i başka bir şeye dönüştürmek için bir işlev yazmanız daha iyi olur. Ayrıca, 'typeid''in derleyici sürümünden sürümüne aynı kalacağı garantisi yoktur. Bu ayrıca, diskler arasında 'typeid 'saklamak istemediğiniz anlamına gelir, ancak çalışmaların arasında korunmayan bir önbellek dosyası dışında. –