dev-cpp下关于typeid().name()输出的解释

[转:http://topic.csdn.net/u/20090527/14/a316c9b8-ca75-4bce-bb7d-f5dc616bfe9d.html]

它的输出格式为 [指针][名称空间][类别][模板]

[指针]:若是指针则输出P。

[名称空间]:若是std则输出St,若是自定义的名称空间则输出字符数及它的名字,并在开头加N,在结尾加E。

[类别]:若是自定义的名称空间则输出字符数及它的名字,若内建类型输出如下:
  bool: b
  char: c
  signed char: a
  unsigned char: h
  (signed) short (int): s
  unsigned short (int): t
  (signed) (int): i
  unsigned (int): j
  (signed) long (int): l
  unsigned long (int): m
  (signed) long long (int): x
  unsigned long long (int): y
  float: f
  double: d
  long double: e

[模板] 类型模板以I开头,以E结尾;常数模板以L开头,以E结尾。只有整型变量(int、char之类的)才能做为常数模板,浮点数不行。

相信讲了这么多,楼主一定一头雾水。且让小弟举隅:
类型foo:输出3foo,因为foo有3个字符。
类型A*:输出P1A,因为A有1个字符,而此类型为A的指针。
类型std::complex<long double>:输出St7complexIeE。
类型test::really:输出N4test6reallyE。

较复杂的情形:
假设定义了以下的物件
template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
class Matrix
类型Eigen::Matrix<complex<float>, 3, 3, 0, 3, 3>:输出N5Eigen6MatrixISt7complexIfELi3ELi3ELi0ELi3ELi3EEE,注意int _Rows = 3是输出Li3E。
类型Eigen::Matrix<double, -1, -1, 0, -1, -1>:输出N5Eigen6MatrixIIdELin1ELin1ELi0ELin1ELin1EEE,其中负号是以n输出。

posted @ 2012-01-07 20:42  ijustwanttorun  阅读(611)  评论(0编辑  收藏  举报