学习ROS机器人编程(第二版)
18.2 什么是 RTTI
假如在编程中遇到了特殊的问题,而只要我们知道了一个一般指针的准确类型它就会迎刃而解,我们该怎么办?比如,假设允许我们的用户将任一形状变成紫色来表示加亮。用这种方法,他们可以发现屏幕上的所有三角形都被加亮。我们可能自然地想到用虚函数,像 TurnColorIfYouAreA()
,它允许一些种类颜色的枚举型参数和 shape::circle
、shape::square
或 shape::triangle
参数。为了解决这种问题,多数类库设计者把虚函数放在基类中,使运行时返回特定对象的类型信息。
我们可能见过一些名字为 isA()
和 typeOf()
之类的成员函数,这些就是开发商定义的 RTTI 函数。使用这些函数,当处理一个对象列表时就可以说:“如果这个对象是 triangle
类的,那它就会被加亮。”
有关 RTTI 和类型转换的详细介绍,可以参考运行时类型信息 RTTI 及类型转换。如果你对虚函数和纯虚函数的区别有疑问,请查看虚函数和纯虚函数。对于虚基类、虚函数与纯虚函数的比较,建议阅读虚基类虚函数与纯虚函数和函数覆盖虚函数纯虚函数对比。
图18-1显示了RTTI的实际应用。如果你想了解更多关于虚函数的内容,不妨看看虚函数详解以及C++_虚函数和纯虚函数区别。
用户评论