查看推断类型的方法

最简单直接的方法是在 IDE 中将鼠标停放在变量上:

../../_images/ide.png

利用报错信息,比如写一个声明但不定义的类模板,用这个模板创建实例时将出错,编译将提示错误原因。

template<typename T>
class A;

A<decltype(x)> xType; //@ 未定义类模板,错误信息将提示x类型
//@ 比如对 int x 报错如下
error C2079: “xType”使用未定义的 class“A<int>”

使用 type_id 运算符和 std::type_info::name 获取类型,但得到的类型会忽略 cv 和引用限定符:

template<typename T>
void f(T& x)
{
    std::cout << "T = " << typeid(T).name() << '\n';
    std::cout << "x = " << typeid(x).name() << '\n';
}

使用 Boost.TypeIndex 可以得到精确类型:

#include <boost/type_index.hpp>

template<typename T>
void f(const T& x)
{
    using boost::typeindex::type_id_with_cvr;
    std::cout << "T = " << type_id_with_cvr<T>().pretty_name() << '\n';
    std::cout << "x = " << type_id_with_cvr<decltype(x)>().pretty_name() << '\n';
}