2011-10-18 71 views
1

我正在嘗試模板向量。在我的主要我有以下幾點:使用具有向量和向量函數的模板

std::vector<Word> concordance = push_vector(data); 

凡字是包含的std :: string和int一個結構,而數據則是的std :: string。在我的頭文件我有:

template <typename T> 
std::vector<T> push_vector(std::string&); 

但是我編譯時出現以下錯誤:

main.cpp: In function ‘int main(int, char**)’: 
main.cpp:27:53: error: no matching function for call to ‘push_vector(std::string&)’ 
main.cpp:27:53: note: candidate is: 
templates.h:13:20: note: template<class T> std::vector<T> push_vector(std::string&) 

我知道我失去了一些東西,當我實現我的模板功能,但我不知道什麼。提前感謝您的時間。

回答

2

如果我理解你真正想做或許更多的東西是這樣的:

template <typename T> 
void push_vector(const std::string& str, std::vector<T>& vec) 
{ 
    // convert str to T if possible 
    // throw on failure maybe? 
    // assign vec with converted data 
} 

然後調用它像這樣:

std::string data("Hello"); 
std::vector<Word> concordance; 
push_vector(data, concordance); 

否則,你就必須明確給出的函數是模板因爲它不能從的右值中推導出您正在將返回值分配到該類型應該是的類型。不要提及通過參考傳遞出參數,這樣可以節省您的一些性能。

+0

您的建議最有意義。我在我的代碼中實現了它,它完美地工作。謝謝。 –

1

嘗試:

std::vector<Word> concordance = push_vector<Word>(data); 

編譯器不能沒有一絲解決這個問題,因爲你不使用除返回值以外的任何地方T。通常,模板參數也被用作一個(或多個)模板函數參數的類型,然後編譯器可以直接解析它。