#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的简单实现
本文介绍了一个简单的C++模板元编程示例,用于去除引用并实现完美转发。通过定义`RemoveReference`结构体和`Forward`函数模板,可以有效地处理不同类型引用的去除,并展示如何在实际代码中应用这些技术。
442

被折叠的 条评论
为什么被折叠?



