我想找出变量的类型(变量由Template参数给出,所以我不知道它是什么).
#include <iostream>
#include <typeinfo>
int main()
{
double test;
std::cout << typeid(test).name() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
但是代码只发出:$./ test
d
但我需要双倍代替.
关键是,我不知道期望哪种类型,但我必须在一个子程序中编写它,这个子程序有待编译.所以d是个坏主意.
在 GNU ABI 中,有一个助手可以name()
分解atypeid
免责声明如果不是很明显, GNU ABI当然只支持从 GNU ABI 中删除名称(甚至可能不支持大幅变化的版本)。
#include <cxxabi.h>
#include <stdlib.h>
#include <string>
template <typename T> std::string nameofType(const T& v)
{
int status;
char *realname = abi::__cxa_demangle(typeid(v).name(), 0, 0, &status);
std::string name(realname? realname : "????");
free(realname);
return name;
}
Run Code Online (Sandbox Code Playgroud)