使用类外部的模板类中的typedef成员作为成员函数的返回类型

时间:2015-12-14 13:15:01

标签: c++ templates typedef member

我应该放什么而不是三个问号?

template <class T>
class B_T
{
public:
    typedef _Array_iterator<T, uint32> iterator;

    iterator begin();
};

template <class T>
??? B_T<T>::begin()
{
    // code here
}

3 个答案:

答案 0 :(得分:4)

此:

template <class T>
typename B_T<T>::iterator B_T<T>::begin()
{
    // code here
}

需要typename关键字,因为iterator取决于模板参数,并且在this SO答案中恢复。

答案 1 :(得分:1)

template<typename T>
typename B_T<T>::iterator B_T<T>::begin();

答案 2 :(得分:1)

您有多种选择:

template <class T>
_Array_iterator<T, uint32> B_T<T>::begin() {/**/}

但为什么在这种情况下使用typedef ;-)
其他经典方式:

template <class T>
typename B_T<T>::iterator B_T<T>::begin() {/**/}

从C ++ 11开始:

template <class T>
auto B_T<T>::begin() -> iterator {/**/} // No need of `typename B_T<T>::` before `iterator`.