有没有办法从虚函数调用基类方法作为派生类,而不是基类?示例代码:
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?
}
Run Code Online (Sandbox Code Playgroud)
Bar*_*rry 14
只需删除decltype:
void print() { std::cerr << typeid(*this).name(); };
Run Code Online (Sandbox Code Playgroud)
this总是指向一个类的实例,其成员函数的this内部A始终是一个A*.所以typeid(decltype(*this))总是给你A.
另一方面,typeid(*this)将查找运行时类型信息,这将确定this实际上是B(因为A是多态类型).