C++获知表达式的类型


有时候我们想知道一个东西它具体是什么类型。比如,pthread_t,它到底是个整数呢,还是个指针呢,还是什么其它东西呢?幸运的是,C++有RTTI,我们可以通过typeid来得到类型信息。

如:

std::cout << typeid(HANDLE).name() << std::endl;

这段代码在VC中工作的很好。但是在gcc中就不行了,要稍微麻烦一点。gcc中,type_info的name()函数返回的是修饰(mangling)后的名字。此时我们需要demangling一下。

幸运的是,gcc的abi中有一个函数可以帮我们的忙。
#include <iostream>
#include <typeinfo>
#include <cxxabi.h>
#include <stdlib.h>
#include <pthread.h>

using namespace std;

int main(int argc, char* argv[]) {
  int status;
  pthread_t thr;
  char* realname = abi::__cxa_demangle(typeid(thr).name(), 0, 0, &status);
  std::cout << realname << std::endl;
  free(realname);
  return 0;
}
# g++ -o t test.cpp -g3 -Wall
# ./t
unsigned long

评论

此博客中的热门博文

想换个新路由器

这几天玩快手玩的入迷

用java生tensorflow的tfrecord文件