c++ - 使用gcc在C++中将静态类型转换为字符串

标签 c++ gcc typeof

这与 Is it possible to print a variable's type in standard C++? 是同一个问题但我不想要 RTTI。我正在使用表达式模板(例如 Eigen)编写代码,这意味着我的变量类型可能真的涉及到,而且我不知道实际类型。但是,编译器知道这些类型并且可以在出现问题时告诉我:

error: ‘const struct Eigen::EigenBase<Eigen::Matrix<double, 1, 1, 0, 1, 1> >’ ...

有什么方法可以将变量名转换为具有(静态)类型名称的字符串,以便我可以在不破坏程序的情况下调试程序?例如

int a;
M b;
cout << TYPEOF(a) << endl << TYPEOF(b) << endl;

会打印

int
const struct Eigen::EigenBase<Eigen::Matrix<double, 1, 1, 0, 1, 1> >’

最佳答案

typeid 可以应用于一个类型(5.2.8p4):

std::cout << typeid(int).name() << '\n'
  << typeid(M).name() << '\n';

这不涉及任何运行时开销。

关于c++ - 使用gcc在C++中将静态类型转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13702421/

相关文章:

c++ - 如何获取变量的类型?

c++ - '运营商新' : function does not take 2 arguments

c++ - 如何避免离合器台球?

c++ - 数组结构和结构数组 - 性能差异

json - 此 JSON 对象 {yourVariable : "nothing yet"} 中的键的类型是什么

javascript - 检查 Google Analytics _gaq 对象是否已加载并可用

c# - 传递一个成员函数,如 C++ 中的 std::function(如 C# 中)

c++ - 实现与 <<? 一起使用的有界字符串格式化运算符的有效方法

c++ - 在回溯期间检索 sigcontext

使用 -O2 与 -O1 时,Cygwin64 gcc C/汇编程序崩溃