tuu*_*uun 5 c++ type-inference c++11
我正在研究C++ 11/14的自动功能.
出于教育目的,我想明确显示我的代码类型推断的结果.我尝试了typeid().name(),但我发现这种方法存在两个问题.
@πάνταῥεῖ我试过用你指出的abi :: __ cxa_demangle().问题1解决了,谢谢,但是typeid().name()似乎不包含CV修饰符信息.我认为使用auto
关键字有一些缺陷,所以我希望看到类型推断的确切结果,包括CV修饰符和引用类型.
我在mac os 10.10.3上使用clang 6.1.0,但我想知道可移植的方式来做到这一点,如果可能的话.
尝试Scott Meyers(Effective Modern C++)提出的方法:
声明一个模板(但不要定义它)
template<typename T> // declaration only for TD;
class TD; // TD == "Type Displayer"
Run Code Online (Sandbox Code Playgroud)
然后使用您的类型实例化此模板
TD<decltype(x)> xType
Run Code Online (Sandbox Code Playgroud)
编译器现在会抱怨这个不完整的类型(通常会显示它的全名)
错误:聚合'TD <int> xType'的类型不完整,无法定义
参见"有效的现代C++"第4项(一般我认为这本书是"必读")
最近将类型索引库添加到Boost中.它试图解决你提到的一些问题.
例:
cout << boost::typeindex::type_id<int const volatile*>().pretty_name() << endl;
cout << boost::typeindex::type_id_with_cvr<int const&>().pretty_name() << endl;
Run Code Online (Sandbox Code Playgroud)
打印:
int const volatile*
int const&
Run Code Online (Sandbox Code Playgroud)