在不执行程序的情况下检索C++ 11中的auto类型

use*_*464 13 c++ static-analysis c++11

我有一些C++ 11代码使用auto推断类型,我必须转换为C++ 98.我将如何转换代码,在实际类型中替换所有实例auto

Sho*_*hoe 12

它将是一个PITA,但您可以声明一个接受单个类型参数的不完整的结构模板.

给定x您想要知道其类型的变量,您可以使用struct,decltype(x)这将导致编译器错误,该错误将显示推断类型.

例如:

template<class Type> struct S;

int main() {
    auto x = ...;
    S<decltype(x)>();
}
Run Code Online (Sandbox Code Playgroud)

Live demo

这将产生以下形式的错误消息:

error: implicit instantiation of undefined template 'S<X>' (clang++)
error: invalid use of incomplete type 'struct S<X>' (g++)
Run Code Online (Sandbox Code Playgroud)

X被推断出的类型.在这种特殊情况下,类型是int.

琐事:这是Scott Meyer在最近的NDC 2014视频中推荐的(我不记得哪一个).


Csq*_*Csq 5

正如auto在编译时所知,您需要与编译器进行互操作.

一个选项是Clang编译器LibTooling库,它提供了可以基于静态分析工具的基础结构.例如,查看他们的重构示例代码,.c_str()代码中删除多余的调用.我想你可以写一个类似的工具转换auto成推断类型.