【发布时间】:2013-06-04 17:02:01
【问题描述】:
我看到std::remove_reference 的可能实现如下
template< class T > struct remove_reference {typedef T type;};
template< class T > struct remove_reference<T&> {typedef T type;};
template< class T > struct remove_reference<T&&> {typedef T type;};
为什么lvalue 和rvalue reference 有专门化?通用模板本身是否足够并删除参考?我在这里很困惑,因为在T& 或T&& 专业化中,如果我尝试使用::type,我仍然应该分别得到T& 或T&&,对吗?
您能解释一下为什么我们在 move 中投射到remove_reference<t>::type&& 吗? (是不是因为参数被命名了,所以在move函数中会被当作左值处理?)。
另外,您能否指出一种方法,让我可以找出并打印类型是什么?例如,如果它是int 类型的rvalue,那么我应该能够打印出int&& 已通过? (我一直在使用std::is_same 手动检查。)
感谢您的宝贵时间。
【问题讨论】:
-
这是一个非常的好问题!
标签: c++ templates c++11 template-specialization