C ++ typeid。如何指出派生类?

时间:2018-01-04 20:03:29

标签: c++ oop types typeid

在我的项目中,我有矢量基类类型,我用对象派生类填充它。如何获取有关向量中类型的信息? 我尝试过类似的东西,但它无法正常工作。

#include <iostream>
#include <typeinfo>
#include <vector>
using namespace std;

class A {
public:
  virtual ~A() {}
};

class B : public A {
public:
  ~B() {}
};

int main() {

  vector<A *> wektor;
  wektor.push_back(new B);
  cout << typeid(wektor[0]).name();
  return 0;
}

输出:

 P1A

2 个答案:

答案 0 :(得分:0)

如果你改变:

为:

cout<<typeid*(wektor[0]).name();

它将打印有关对象实际类型的信息,现在它只知道你有一个指针。

答案 1 :(得分:0)

来自C++11 Standard

  

typeid应用于类型为多态类类型的glvalue表达式时,结果引用表示最派生对象类型的std::type_info对象(即动态类型) glvalue指的是。

使用时:

cout<<typeid(wektor[0]).name();

您正在指针上调用typeid。指针不是多态类型。通过解引用指针获得的对象是多态类型。

因此,如果要获取派生程度最高的对象的type_info,则需要取消引用typeid表达式中的指针。

cout << typeid(*wektor[0]).name();
//             ^^