在生产代码中使用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