應該如何替換三個問號?從類之外的模板類中使用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
}
應該如何替換三個問號?從類之外的模板類中使用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
}
此:
template <class T>
typename B_T<T>::iterator B_T<T>::begin()
{
// code here
}
因爲iterator
取決於模板參數是必須的typename
關鍵字,在this以及恢復SO回答。
template<typename T>
typename B_T<T>::iterator B_T<T>::begin();
您有幾種選擇:
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`.
I這是你自己的代碼?因爲那麼你應該知道[有關領導下劃線名稱的規則](http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-ac-identifier )。 –
@JoachimPileborg _Array_iterator是std庫的一部分。在真實代碼中,前綴爲'std ::',抱歉誤導。 – Yola
使用特定標準庫實現的內部類時應該小心,因爲這會使代碼不可移植。如果您將編譯器/標準庫升級到更新版本,甚至可能會導致問題。 –