【发布时间】:2020-07-02 07:28:14
【问题描述】:
我正在努力解决参考折叠问题(https://www.amazon.com/Effective-Modern-Specific-Ways-Improve/dp/1491903996 上的第 28 项),并且想尝试为模板提供不同的内容。
我用 lvalue 和 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
编译器有什么方法可以准确地找出它为调用模板所做的特化和类型?
【问题讨论】:
标签: c++ templates rvalue lvalue