#include<iostream>
using std::cout;
using std::cin;
using std::endl;
template<typename T>struct RemoveReference{
typedef T type;
};
template<typename T>struct RemoveReference<T&&>{
typedef T type;
};
template<typename T>struct RemoveReference<T&>{
typedef T type;
};
template<typename T>typename std::remove_reference<T>&& Move(T m_v)
{
return static_cast<remove_reference<T>&&>(m_v);
}
template<typename T>T&& Forward(typename std::remove_reference<T>::type& m_v)
{
return static_cast<T&&>(m_v);
}
int main()
{
int x = 100;
RemoveReference<int&&>::type c = x;
cout <<typeid(c).name()<<" "<<c << endl;
RemoveReference<int&>::type m = Forward<int>(x);
cout <<typeid(x).name()<<" "<< x << endl;
int a;
cin >> a;
return 0;
}
这里的RemoveReference比较简单第一个是RemoveReference的通用模板,然后再模板特化,使用T&和T&&的值得特化;
最后是一个Forward的简单实现