在生產代碼中使用typeid
通常被認爲是不好的做法嗎?另外,我注意到typeid
返回type_info
,其中包括一些元數據(如具有類型名稱的字符串);有沒有辦法停用這個?C++:在生產代碼中使用typeid
8
A
回答
8
很難說特定語言功能的使用是「壞」還是「好」。這真的取決於你如何使用它。如果使用typeid
這個工具是正確的工具,但沒有任何內在的錯誤,但是如果對解決的任何問題有更好的解決方案,那麼您應該避免使用typeid
來支持更好的解決方案。
使用typeid
通常不是一個好主意,因爲通過使用繼承和虛函數可以避免它的使用。如果你能以這種方式更新你的系統,那麼這樣做可能是一個好主意。
至於你是否可以有typeid
避免返回std::type_info
,這應該不會導致任何性能問題。 typeid
的計算結果爲const std::type_info&
,因此它不會深度複製它包含的任何字符串信息。大多數實現都將對象的虛擬函數表中存儲的實際對象存儲在對象的虛擬函數表中,因此不會在內部完成複製。
11
- 取決於你在用typeid做什麼。如果你在使用多態的地方,那當然是不好的。但是,傾銷痕跡或類似的東西來調試客戶的機器就好了。
- 唯一的方法是在編譯器上禁用RTTI。沒有標準的做法。請注意,這也將禁用
dynamic_cast
。
相關問題
- 1. 在生產代碼中使用Spring Assert.notnull
- 2. 生產中的C#代碼時序
- 3. 傑克遜TYPEID不產生JSON包括
- 4. 中產生的XAML代碼
- 5. System.Diagnostics.Debug.WriteLine在生產代碼
- 6. 'typeid'與'typeof'在C++中
- 7. 是使用-std = C++ 11適用於生產代碼GCC 4.8.1
- 8. 在C中生成代碼
- 9. C代碼宏產生使用文字VS可變
- 10. C#在生產中使用Json WebService
- 11. 在生產代碼中使用文本/ html javascript模板
- 12. 我應該在生產代碼中使用Google的JSAPI嗎?
- 13. 排除開發代碼在生產中使用彈性豆杆
- 14. 任何方式在生產代碼中使用Hamcrest匹配器?
- 15. 系統功能在生產代碼中的使用
- 16. 誰和何時在生產環境中使用遞歸代碼
- 17. 在生產代碼中使用Reflection會不好?
- 18. 在生產代碼中使用setTimeout是否安全?
- 19. 面向方面的C(不是C++)在生產代碼
- 20. 在使用Cython生成的C代碼中識別C函數
- 21. C++ - typeid的(),在派生類中使用不返回正確的類型
- 22. 如何在測試代碼和生產代碼中使用不同的C++文件?
- 23. 零生產代碼的TDD
- 24. 模擬生產代碼
- 25. 生產剖析代碼
- 26. 剝離代碼生產
- 27. 代碼生成UpperEmail財產
- 28. LWJGL代碼產生黑屏
- 29. 生產代碼和端口
- 30. 剔除生產代碼
您可能不想從庫調用中返回'typeid'引用。你最好寫一個函數來將'typeid'轉換爲別的東西,比如'int',在那裏控制映射。另外,不能保證'typeid'將從編譯器版本到版本保持不變。這也意味着你不想在磁盤上存儲'typeid',除非在運行之間沒有保存的緩存文件中。 – 2011-06-15 23:18:22