如何在编译期间输出c ++类型信息

Cat*_*Dog 4 c++ types

大家.我正在调试一个严重模板类的类型不匹配的问题.我想在编译期间知道c ++类型信息,所以我写这个:

#pragma message typeinfo(var)
Run Code Online (Sandbox Code Playgroud)

它只是不起作用.

所以我在这里寻求帮助.我不确定是否有可能.但我认为编译器必须知道编译期间的类型信息.

Cur*_*ous 9

预编译器在编译时不会帮助你.它的工作是预处理,这在编译时发生.

如果想在编译时输出类型信息,请尝试以下操作

template <typename...> struct WhichType;
class Something {};

int main() {
    WhichType<Something>{};
}
Run Code Online (Sandbox Code Playgroud)

这里有实例.当你编译它时,你应该得到一个错误,它给你在尝试实例化时模板内部的任何类型WhichType.这是我从Scott Meyers的Essential Modern C++书中摘取的一个巧妙的技巧.它似乎对我到目前为止遇到的大多数主流编译器都很有效.

如果要在运行时获取类型信息

#include <iostream>
#include <typeinfo>

using std::cout;
using std::endl;

int main() {
    auto integer = int{};
    cout << typeid(integer).name() << endl;
}
Run Code Online (Sandbox Code Playgroud)

注意不要太熟悉RTTI(RunTime类型信息)typeid,C++还提供了几个编译时类型内省实用程序http://en.cppreference.com/w/cpp/header/type_traits.