如果模板参数是右值引用,引用或常量值,是否可以输出某些方法?也就是说,我正在使用通用引用,并且为了调试/学习目的,想要确切地看到实际匹配的类型。
template<typename T>
void write( T && f ) {
std::cout << typeid(f).name;
}
这当然没有告诉我它是传递的rvalue,lvalue或const参数。我想以某种方式显示实际匹配的参数类型。请注意,我特别感兴趣的是看看这个单一功能是如何匹配的。
答案 0 :(得分:3)
您可能需要查看type_traits
标题。它具有检测类型是否为const
以及是否为reference
的特征。
您可以查看T
以查看您绑定的引用类型:
f
属于laval-reference-type,那么T
f
为const
,那么T
f
是rvalue-reference,那么T
不是引用(如果至少受到参数推断的约束)。所以你可以这样做:
template<typename T>
void write( T && f ) {
std::cout << "f is a " <<(std::is_const<typename std::remove_reference<T>::type>::value?"const ":"")<<(std::is_lvalue_reference<T>::value?"lvalue":"rvalue")<<" reference";
}