2014-04-14 65 views
0

所以我有模板類(略)所示:C++:如何返回模板類中定義的別名?

template <typename keyT, typename valueT> 
class hashMap { 
public: 
    using dataT = pair<keyT,valueT>; 
    using maybeT = optional<dataT>; 
    maybeT notFound = optional<dataT>(); 
    maybeT find(keyT &v); 
    <snip> 
}; 

當我嘗試定義find()方法,我有

template <typename keyT, typename valueT> 
hashMap::maybeT hashMap<keyT,valueT>::find(keyT &k) 
{ 

和HashMap :: maybeT無法識別(」預期類或名稱空間「)。具有keyT和valueT的合格hashMap也無濟於事。

如何導出這些別名(或typedefs,如果有方法可以完成這項工作)。

回答

2

你需要澄清對從屬名稱:

template <typename keyT, typename valueT> 
typename hashMap<keyT, valueT>::maybeT hashMap<keyT,valueT>::find(keyT &k) 
// ^^^^^ 
{ 
    // ... 
} 

(既然你寫一個模板,你還不如把一切都在線,不過,並減少了代碼噪音,否則你應該補充。 inline給成員函數聲明。)

+0

啊!謝謝。我嘗試了錯誤的消歧:typename hashMap :: maybeT – user3255510