I'm reading this,所以我现在看std::forwardstd::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);
    }

我想我了解了整个故事,但是我不理解模板定义(typename)之外template<...>的使用。在这种情况下是什么意思?

最佳答案

它表明identity<_Ty>::type&是类型,而不是类中的静态变量。

这是一个更简单的示例:

template<class T> void f() { T::x * p; ... }

您可以认为p是指向T::x类的指针。
或者您可以认为T::x是一个静态变量,它乘以p
因此,在这种情况下,编译器无法真正知道您对这段代码的意思。

为了避免这种歧义,您应该通过添加T::x来指定typename是一种类型:
template<class T> void f() { typename T::x * p; ... }

在您的情况下也是一样。

关于c++ - 在这种情况下,typename是什么意思,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11898679/

10-11 17:45