dem*_*rge 2 c++ templates c++11
我正在读这个,所以我现在正在研究std::forward和的实现std::move:
// TEMPLATE FUNCTION forward
template<class _Ty> inline
_Ty&& forward(typename identity<_Ty>::type& _Arg)
{ // forward _Arg, given explicitly specified type parameter
return ((_Ty&&)_Arg);
}
// TEMPLATE FUNCTION move
template<class _Ty> inline
typename tr1::_Remove_reference<_Ty>::_Type&&
move(_Ty&& _Arg)
{ // forward _Arg as movable
return ((typename tr1::_Remove_reference<_Ty>::_Type&&)_Arg);
}
Run Code Online (Sandbox Code Playgroud)
我想我得到了整个故事,但我不理解typename模板定义(template<...>)外部的使用.在这种情况下它意味着什么?
它表明这identity<_Ty>::type&是一个类型,而不是类中的静态变量.
这是一个更简单的例子:
template<class T> void f() { T::x * p; ... }
Run Code Online (Sandbox Code Playgroud)
你可以认为这p是一个指向某个类的指针T::x.或者你可以认为这T::x是一个乘以的静态变量p.所以,在这种情况下,编译器无法真正知道这段代码的含义.
要避免这种不明确性,您应该T::x通过添加typename以下内容来指定该类型:
template<class T> void f() { typename T::x * p; ... }
Run Code Online (Sandbox Code Playgroud)
在你的情况下,这是一回事.
| 归档时间: |
|
| 查看次数: |
1084 次 |
| 最近记录: |