在模板中显示参数类型

Show type of param in template

我正在努力解决引用崩溃问题(https://www.amazon.com/Effective-Modern-Specific-Ways-Improve/dp/1491903996 上的第 28 项),并想尝试向模板提供不同的内容。

我用左值和 ravlue 调用模板,但我没有在模板中看到确切的类型。我怎样才能让编译器在专门化模板时吐出准确的类型?

#include <iostream>
#include <typeinfo>

class Widget{
public:
    int x=0;
};


template<typename T>
void MyMethod(T&& param){
    std::cout << typeid(param).name()<< std::endl; // this just says 6Widget...
};

Widget GetWidget(){
    return Widget();
};

int main() {

    Widget &w1 = * new Widget;
    MyMethod(w1);

    Widget w2;
    MyMethod(w2);

    MyMethod(GetWidget());

    return 0;
}

这只是输出

6Widget
6Widget
6Widget

编译器是否有任何方法可以吐出它为调用模板所做的确切特化和类型?

真是一本好书。不过你好像跳了好几章了

在第 4 项中,您将看到如何使用 Boost.TypeIndex、使用:

std::cout << boost::typeindex::type_id_with_cvr<decltype(param)>().pretty_name();