2015-12-14 88 views
3

應該如何替換三個問號?從類之外的模板類中使用typedef成員作爲成員函數的返回類型

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

I這是你自己的代碼?因爲那麼你應該知道[有關領導下劃線名稱的規則](http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-ac-identifier )。 –

+0

@JoachimPileborg _Array_iterator是std庫的一部分。在真實代碼中,前綴爲'std ::',抱歉誤導。 – Yola

+1

使用特定標準庫實現的內部類時應該小心,因爲這會使代碼不可移植。如果您將編譯器/標準庫升級到更新版本,甚至可能會導致問題。 –

回答

4

此:

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

因爲iterator取決於模板參數是必須的typename關鍵字,在this以及恢復SO回答。

1
template<typename T> 
typename B_T<T>::iterator B_T<T>::begin(); 
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`. 
相關問題