正确使用RTTI(Sensible uses for RTTI)
因为你能够从一个匿名的多态指针发现类型信息和RTTI可以在虚拟函数作用之前就有意义,所以RTTI经常被新手误用。对很多有过程式编程背景的人们来说,叫他们不要用switch语句来将程序组织成集合是很困难的。他们可能用RTTI来完成这些,因而就丢失了代码开发和维护中多态的重要价值。C++的意图是让你在你的代码里使用虚函数,以及仅仅在你必须的时候使用RTTI。
无论如何,按照他们的意图使用需虚函数需要你有基类定义的控制权,因为在你扩展你的程序时,有时候你会发现基类并没有包含你需要的虚函数。如果基类来自一个库或者被其他人所控制,问题的一种解决办法就是RTTI,你可以衍生一个新的类型并加上你的额外成员函数。在代码的另外其他地方,你能探测到你的特殊类型和调用其成员函数。这并不会摧毁多态和程序的扩展性,因为加入一个新的类型并需要你搜寻switch语句。可是,当你向需要你的特性的main函数加入新代码时,你必须探测你的特殊类型。
因为一个特殊类的好处,在基类中放入一个特性意味着所有从此基类衍生的其他类需要为一个纯虚函数有一些意义很少的代理桩(stub)。这使得接口很模糊,也使得从你的基类衍生,那些必须覆盖纯虚函数的人感到很恼火。
最后,RTTI有时可以解决效率问题。如果你的代码正确使用了多态,又表现出产生了你的对象中的一个与通用代码在可怕的低效上相抵触。你能够用RTTI挑出那种类型,以及写具体的代码来改善效率
请继续关注,以后我还将继续翻译
如有问题或者翻译的不准确请你联系我(我拿不准的地方都有原文)
本书的英文版在bruceeckel的网站上可以免费下载。
本书只用于学习,擅自用于别的用途,后果自负!!
我的QQ:31877784
本文地址:http://com.8s8s.com/it/it1040.htm