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? }
void print() { std::cerr << typeid(*this).name(); };
这总是指向其成员函数所在的类的实例.这里面的A总是A *.所以typeid(decltype(* this))总能给你A.
另一方面,typeid(* this)将查找运行时类型信息,这将确定这实际上是B(因为A是多态类型).