2011-06-15 38 views
8

在生产代码中使用typeid通常被认为是不好的做法吗?另外,我注意到typeid返回type_info,其中包括一些元数据(如具有类型名称的字符串);有没有办法停用这个?C++:在生产代码中使用typeid

+3

您可能不想从库调用中返回'typeid'引用。你最好写一个函数来将'typeid'转换为别的东西,比如'int',在那里控制映射。另外,不能保证'typeid'将从编译器版本到版本保持不变。这也意味着你不想在磁盘上存储'typeid',除非在运行之间没有保存的缓存文件中。 – 2011-06-15 23:18:22

回答

8

很难说特定语言功能的使用是“坏”还是“好”。这真的取决于你如何使用它。如果使用typeid这个工具是正确的工具,但没有任何内在的错误,但是如果对解决的任何问题有更好的解决方案,那么您应该避免使用typeid来支持更好的解决方案。

使用typeid通常不是一个好主意,因为通过使用继承和虚函数可以避免它的使用。如果你能以这种方式更新你的系统,那么这样做可能是一个好主意。

至于你是否可以有typeid避免返回std::type_info,这应该不会导致任何性能问题。 typeid的计算结果为const std::type_info&,因此它不会深度复制它包含的任何字符串信息。大多数实现都将对象的虚拟函数表中存储的实际对象存储在对象的虚拟函数表中,因此不会在内部完成复制。

11
  1. 取决于你在用typeid做什么。如果你在使用多态的地方,那当然是不好的。但是,倾销痕迹或类似的东西来调试客户的机器就好了。
  2. 唯一的方法是在编译器上禁用RTTI。没有标准的做法。请注意,这也将禁用dynamic_cast