有没有办法从虚函数调用基类方法作为派生类,而不是基类? 示例代码:
class A
{
public:
virtual void a() = 0;
void print() { std::cerr << typeid(decltype(*this)).name(); };
};
class B : public A
{
public:
virtual void a() { print(); }
};
int main()
{
B b;
b.a(); //prints 1A, I want it to print 1B, is it even possible?
}
答案 0 :(得分:14)
只需删除decltype
:
void print() { std::cerr << typeid(*this).name(); };
this
始终指向其成员函数所在的类的实例。this
内的A
始终为A*
。因此typeid(decltype(*this))
始终会为您提供A
。
另一方面,typeid(*this)
将查找运行时类型信息,这将确定this
实际上是B
(因为A
是多态类型)。