正如其他人指出的那样,您可以使用 Dynamic _ cast。但通常使用 Dynamic _ cast 查找正在处理的派生类的类型表明设计不好。如果你重写一个以 A 的指针作为参数的函数,那么它应该能够处理 A 类本身的方法/数据,而不应该依赖于 B 类的数据。在您的情况下,如果您确信您正在编写的方法只能用于类 B,那么您应该在类 B 中编写一个新的方法,而不是重写。
class A {};
class B : public A {};
class Foo {
public:
void Bar(A& a) {
// do something
}
void Bar(B& b) {
Bar(static_cast<A&>(b));
// do B specific stuff
}
};