2016-12-28 117 views
-2

我正在嘗試爲特定類型的所有模板化值專門化模板函數。我有以下功能:特定模板類型的功能模板專業化

template <class T> 
std::string toString(const T& t); 

下面將讓我專注的功能花車的Vector2:

template <> 
std::string toString<Vector2<float>>(const Vector2<float>& v); 

,但我想將專門用於所有類型的Vector2的功能。我已經試過這樣的事情:

template <class T> 
std::string toString(const Vector2<T>& v); 

但調用toString()函數時,像這樣:

Vector2<float> vec; 
toString(vec); 

的第一個函數被調用。我怎樣才能做到這一點?


編輯:

我可能已經離開了一個重要的細節,我其實是調用像這樣的功能:

toString<Vector2<float>>(vec) 

我不認爲這有差別,但顯然它確實如此,因爲當我打電話給它時,它沒有任何問題。爲什麼這會導致不需要的功能被調用?對不起,浪費你的時間,並感謝你的幫助。

+2

[無法重現](http://coliru.stacked-crooked.com/a/7368da00a62395b2)。注意:你重載'toString',而不是專門化 - 這是正確的方法。這應該工作。 – Quentin

+1

@Quentin我懷疑他想部分專門化一個功能。正如你所知道的那樣,這是不可能的,並且因爲實際的超載而出現意外的行爲。需要澄清。 – skypjack

+0

發現問題,更新問題... –

回答

0

那麼,在你的情況下,有可能使用替代技術稱爲重載。

template <typename T> 
std::string toString(const Vector2<T>& vec) 
{ 
    //function body 
} 

證明,適當的函數被調用:http://ideone.com/pR2Dyn

+0

這是OP已經在做的事情。 – Quentin

+0

@Quentin他提到錯誤的函數被調用,但這是不可能的;)http://ideone.com/pR2Dyn – paweldac

+1

[確實](http://stackoverflow.com/questions/41358958/function-template-specialization-換一個特定的模板化型/ 41359040?noredirect = 1個#comment69919451_41358958)。但在問題得到澄清之前,重複部分「有問題」的代碼根本無濟於事。 – Quentin