2015-02-04 110 views
-1

我很驚訝,按照智能感知的行爲,原因是:爲什麼Intellisense不適用於地圖<int, T *>?

template<typename T> 
struct Bar { 
    std::map<int , int *> map; 
    std::map<int , T *> map2; 
    std::vector<int *> vec; 
    std::vector<T *> vec2; 

    T * doBar(void) 
    { 
     map./*displays everything*/ 
    --->map2./*displays only 4 members: at, swap and two operators*/ 
     vec./*displays everything*/ 
     vec2./*displays everything*/  
     return null; 
    } 
}; 

這是一個錯誤?或者當第二個是T/T *時,僅顯示4個成員有一些特殊原因?邏輯會告訴我沒有理由隱藏任何類型的方法,如finderase,即使它們的模板爲second s。
使用未顯示的函數編譯代碼不會引發任何錯誤並顯示正常工作。我使用Visual Studio 2012 (和已經被刪除的智能感知數據庫幾次)

編輯:這確實似乎是VS2012具體的錯誤,只是證實了它的工作原理與VS2013

+2

在VS2013中正常工作。我們稱之爲2012年特定的錯誤。 –

+0

@HansPassant感謝這個信息(回答非常多),我應該刪除這個問題嗎? – wondra

回答

0

的問題是可能是std::map<int , T *>這裏是一個未知的類型。可能有專業化。從個人經驗來看,專業化傾向於混淆智能感知。

+0

好吧,儘管類型是未知的,但應該保證可以找到,等等,這就是通用容器的用途,不是嗎? – wondra

+1

@wondra:Intellisense編譯器實現了核心語言,它不知道這些庫。 – MSalters

相關問題