2014-10-01 59 views

回答

3

看看你的編譯器說什麼!它試圖幫助你。

main.cpp:7:21: error: no matching function for call to 'getVector'

然後:

main.cpp:4:16: note: candidate template ignored: couldn't infer template argument 'T' std::vector<T> getVector(int);

的錯誤是很清楚的:編譯器看到你的getVector功能,但你從來沒有說過一個「混凝土」式的以替代T:編譯器不知道你希望這個向量被保存,所以它只是忽略那個函數模板。

你想在矢量中存儲什麼樣的值?整數例如?然後:

auto myVector = getVector<int>(5); 
         ^give a type here 
+0

謝謝!這解釋了我的困惑。但是我還有一個問題,如果我不知道應該替代T的「具體」類型怎麼辦?就像,我想從文件中獲取數字,但我不知道這些數字是什麼類型。 – 2014-10-02 23:38:33

+0

模板是一個*編譯時*結構:如果您在編譯時不知道'T',那麼您不能實例化模板。但是你可以使用一個可以容納任何東西的類型:例如查看'boost :: any'。這樣你就可以擁有一個'std :: vector ',它可以有效地保存'int','float's,你可以命名它。缺點是你必須在處理它們之前檢查向量中元素的類型。 – 2014-10-02 23:42:44

0

您定義getVector()爲需要一個模板參數T函數模板。需要以某種方式提供該模板參數。如果沒有T的推導或顯式提供,則無法調用該函數。

例如,如果你正在返回矢量持有整數,您可以T像這樣提供int

auto myVector = getVector<int>(5); 
相關問題